今天小編給大家分享一下Python中的sqlite3數(shù)據(jù)庫怎么用的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了棲霞免費(fèi)建站歡迎大家使用!
sqlite3 數(shù)據(jù)庫是 Python 自帶的數(shù)據(jù)庫,甚至不需要額外安裝模塊,而且操作簡單。
Python + MySQL = SQLite
import sqlite3
首先打開我們的編譯器(推薦使用vscode,因?yàn)閿?shù)據(jù)庫文件后綴是 .db,vscode里顯示比較清楚)
先放上代碼
conn = sqlite3.connect('test.db')
使用 sqlite3 的 connect函數(shù)可以創(chuàng)建數(shù)據(jù)庫或者連接數(shù)據(jù)庫,
如果這個(gè)數(shù)據(jù)庫存在,就連接這個(gè)數(shù)據(jù)庫,
如果這個(gè)庫不存在,就創(chuàng)建數(shù)據(jù)庫。
右邊小括號(hào)里的是數(shù)據(jù)庫名。
我們把這個(gè)保存在變量 conn 里,這個(gè)變量名可以自己起
公式:
變量名 = sqlite3.connect( '你要的數(shù)據(jù)庫名.db' )
還是先放代碼
cur = conn.cursor()
在 2.1 中,我們創(chuàng)建了與數(shù)據(jù)庫的連接,我們現(xiàn)在還需要一個(gè)游標(biāo)來執(zhí)行 sql 命令,
所以我們要用 conn 的 cursor 函數(shù)創(chuàng)建一個(gè)游標(biāo)。
conn 就是剛才 2.1 中創(chuàng)建的保存數(shù)據(jù)庫的變量,你要用你定義的變量名,
再定義一個(gè)變量表示這個(gè)游標(biāo)。
公式:
變量 = 數(shù)據(jù)庫變量.cursor()
先放代碼
import sqlite3
def check(db_name,table_name):
conn = sqlite3.connect(db_name)
cursor = conn.cursor()
sql = '''SELECT tbl_name FROM sqlite_master WHERE type = 'table' '''
cursor.execute(sql)
values = cursor.fetchall()
tables = []
for v in values:
tables.append(v[0])
if table_name not in tables:
return False # 可以建表
else:
return True # 不能建表
conn = sqlite3.connect('數(shù)據(jù)庫名.db')
#創(chuàng)建一個(gè)游標(biāo) cursor
cur = conn.cursor()
if (check("數(shù)據(jù)庫名.db","Table名") == False):
sql_text_1 = '''CREATE TABLE 你的table名
(xx XX,
xx XX);'''
# 執(zhí)行sql語句
cur.execute(sql_text_1)
代碼比較長,因?yàn)槲野?2.1 和 2.2 的兩行代碼也加了上去。
我們需要 table(表)來存數(shù)據(jù),創(chuàng)建 table 的代碼如下:
變量名 = '''CREATE TABLE 你的table名
(xx XX,
xx XX);'''
# 執(zhí)行sql語句
cur.execute(上面的變量名)
上面是用一個(gè)變量保存了創(chuàng)建 table 的 sql 語句,
下面使用 cur(就是剛才那個(gè)游標(biāo)).execute() 函數(shù)執(zhí)行創(chuàng)建 table 的語句。
我們也可以使用 cur.executemany 函數(shù)來同時(shí)執(zhí)行多條 sql 語句。
sql 語句的內(nèi)容,比如創(chuàng)建表的格式是上面這樣的
格式:' ' 'CREATE TABLE 你的 table 名 (xx XX, xx XX);' ' '
這行代碼里小寫的 xx 就是你要的屬性名,比如你的數(shù)據(jù)庫是這樣
姓名 | 班級(jí) |
張三 | 1 |
其中,屬性名就是 “姓名” 和 “班級(jí)”,
小寫的 xx 就應(yīng)該分別寫姓名和班級(jí)(注意,不帶引號(hào))
后面的大寫的XX就是這個(gè)屬性所接受的數(shù)據(jù)的類型,
就相當(dāng)于Python中的 int 類型和 str 類型。
只不過,我們?cè)?sql 語句中,把 int 類型改成了 NUMBER,把 str 類型改成了 TEXT。
當(dāng)我們運(yùn)行這個(gè)代碼,我們的文件夾目錄里會(huì)多出來一個(gè) 你的數(shù)據(jù)庫名.db 文件
當(dāng)我們?cè)俅芜\(yùn)行,會(huì)發(fā)現(xiàn)程序報(bào)錯(cuò)了。
報(bào)錯(cuò)信息的大概意思是:table 已經(jīng)存在了。
這是因?yàn)槲覀兊谝淮芜\(yùn)行時(shí)已經(jīng)創(chuàng)建了 table ,我們?cè)俅芜\(yùn)行時(shí),
程序會(huì)再次創(chuàng)建同名 table,就會(huì)報(bào)錯(cuò)。
所以,我們創(chuàng)建 table 之前要判斷一下這個(gè)table存不存在,如果存在就不創(chuàng)建,如果不存在就創(chuàng)建
這個(gè)判斷我把它寫成了一個(gè)函數(shù),就是我上面代碼那個(gè) check 函數(shù)。
這一步也是我想了好長時(shí)間,還找資料找了好長時(shí)間才知道的
先放代碼
cur.executemany('INSERT INTO 你的table名 VALUES (?,?)', data)
conn.commit()
其中第一行代碼中 executemany() 函數(shù)的意思就是同時(shí)執(zhí)行多個(gè) sql 語句。
這個(gè)函數(shù)的括號(hào)里寫的逗號(hào)前面就是插入數(shù)據(jù)的 sql 語句,后面 data 可以是一個(gè)列表或者元組。注意,如果是列表的話,必須是列表里面有若干個(gè)元組的形式。
插入數(shù)據(jù)的 sql 語句的使用:
INSERT INTO 你的table名 VALUES (若干個(gè)逗號(hào),用逗號(hào)分割)
這里我們要插入 data 這些數(shù)據(jù),所以在括號(hào)里我們使用問號(hào) “?” 來代替這個(gè)元素。
大家可以回去看一下 2.3 創(chuàng)建table 的講解,在2.3中,我們創(chuàng)建了兩個(gè)屬性,分別是 “姓名” 和 “班級(jí)”。因?yàn)槲覀冇袃蓚€(gè)屬性,所以要有兩個(gè)問號(hào)。
先放代碼
def find_tb():
cur.execute("select * from 你的table名")
# 提取查詢到的數(shù)據(jù)
return cur.fetchall()
這個(gè)就很簡單了,我寫這個(gè)函數(shù)使用時(shí)可以把你那個(gè)table里的所有數(shù)據(jù)都取出來。
第一行是查找table的 sql 語句,格式是:
select * from 你的table名
下一行再用 fetchall() 函數(shù)把數(shù)據(jù)提取出來,直接 return 即可。
代碼:
import sqlite3
import os
def check(db_name,table_name):
conn = sqlite3.connect(db_name)
cursor = conn.cursor()
sql = '''SELECT tbl_name FROM sqlite_master WHERE type = 'table' '''
cursor.execute(sql)
values = cursor.fetchall()
tables = []
for v in values:
tables.append(v[0])
if table_name not in tables:
return False # 可以建表
else:
return True # 不能建表
def find_tb():
cur.execute("select * from scores")
# 提取查詢到的數(shù)據(jù)
return cur.fetchall()
def zcd():
os.system('cls')
print("學(xué)生分?jǐn)?shù)管理系統(tǒng)")
print("1.增加學(xué)生分?jǐn)?shù)信息")
print("2.查看全部學(xué)生分?jǐn)?shù)")
print("3.查詢分?jǐn)?shù)段內(nèi)學(xué)生分?jǐn)?shù)")
print("4.退出")
if __name__ == '__main__':
# 創(chuàng)建與數(shù)據(jù)庫的連接
conn = sqlite3.connect('stuents_scores.db')
#創(chuàng)建一個(gè)游標(biāo) cursor
cur = conn.cursor()
# 如果沒有表則執(zhí)行建表的sql語句
if (check("stuents_scores.db","scores") == False):
sql_text_1 = '''CREATE TABLE scores
(姓名 TEXT,
班級(jí) TEXT,
性別 TEXT,
語文 NUMBER,
數(shù)學(xué) NUMBER,
英語 NUMBER,
總分 NUMBER);'''
# 執(zhí)行sql語句
cur.execute(sql_text_1)
zcd()
while True:
op = int(input("請(qǐng)輸入:"))
if op == 1:
S_name = input("請(qǐng)輸入要添加的學(xué)生的姓名(如:張三):")
S_class = input("請(qǐng)輸入要添加的學(xué)生的班級(jí)(如:一班):")
S_xb = input("請(qǐng)輸入該學(xué)生性別:")
S_Chinese = int(input("請(qǐng)輸入該學(xué)生語文成績(只輸入一個(gè)數(shù)字,如:82):"))
S_Maths = int(input("請(qǐng)輸入該學(xué)生數(shù)學(xué)成績(只輸入一個(gè)數(shù)字,如:95):"))
S_English = int(input("請(qǐng)輸入該學(xué)生英語成績(只輸入一個(gè)數(shù)字,如:98):"))
S_gj = S_Maths+S_Chinese+S_English # 總分
data = [(S_name, S_class, S_xb, S_Chinese, S_Maths, S_English,S_gj)]
cur.executemany('INSERT INTO scores VALUES (?,?,?,?,?,?,?)', data)
conn.commit()
# cur.close()
# conn.close()
print("成功!")
os.system('pause')
os.system('cls')
zcd()
elif op == 2:
info_list = find_tb()
print("全部學(xué)生信息(排名不分前后):")
for i in range(len(info_list)):
print("第"+str(i+1)+"個(gè):")
print("學(xué)生姓名:"+str(info_list[i][0]))
print("學(xué)生班級(jí):"+str(info_list[i][1]))
print("學(xué)生性別:"+str(info_list[i][2]))
print("學(xué)生語文成績:"+str(info_list[i][3]))
print("學(xué)生數(shù)學(xué)成績:"+str(info_list[i][4]))
print("學(xué)生英語成績:"+str(info_list[i][5]))
print("學(xué)生總成績:"+str(info_list[i][6]))
os.system('pause')
os.system('cls')
zcd()
elif op == 3:
info_list = find_tb()
fen = int(input("你要要查詢總成績高于n分的學(xué)生, 請(qǐng)輸入n:"))
for i in range(len(info_list)):
if info_list[i][6] >= fen:
print("查詢結(jié)果:")
print("第"+str(i+1)+"個(gè):")
print("學(xué)生總成績:"+str(info_list[i][6]))
os.system('pause')
os.system('cls')
zcd()
elif op == 4:
os.system('cls')
break
以上就是“Python中的sqlite3數(shù)據(jù)庫怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。