Python數(shù)據庫sqlite3圖文實例詳解
前言
提到數(shù)據庫,大家第一時間想到的可能是 sql 數(shù)據庫,這種數(shù)據庫非常好用,但是對于新手就不是很容易上手,需要熟悉一段時間才可以大概掌握。這種數(shù)據庫在大型的項目開發(fā)過程中用到的地方不會很多,但是一些普通的項目還是很實用的,大大減少了代碼量。
sqlite3數(shù)據庫
sqlite3 數(shù)據庫是 Python 自帶的數(shù)據庫,甚至不需要額外安裝模塊,而且操作簡單。
Python + Mysql = SQLite
但是這種數(shù)據庫在網上的教程很少,因為我也是最近才知道,所以找了很長時間的資料,
今天終于找齊了,來總結一下。真的找了好長時間啊
1.需要的模塊(只有一個)
import sqlite3
2.模塊的使用
首先打開我們的編譯器(推薦使用vscode,因為數(shù)據庫文件后綴是 .db,vscode里顯示比較清楚)
2.1創(chuàng)建與數(shù)據庫的連接
先放上代碼
conn = sqlite3.connect('test.db')使用 sqlite3 的 connect 函數(shù)可以創(chuàng)建數(shù)據庫或者連接數(shù)據庫,
如果這個數(shù)據庫存在,就連接這個數(shù)據庫,
如果這個庫不存在,就創(chuàng)建數(shù)據庫。
右邊小括號里的是數(shù)據庫名。
我們把這個保存在變量 conn 里,這個變量名可以自己起
公式:
變量名 = sqlite3.connect( '你要的數(shù)據庫名.db' )
2.2創(chuàng)建游標
還是先放代碼
cur = conn.cursor()
在 2.1 中,我們創(chuàng)建了與數(shù)據庫的連接,我們現(xiàn)在還需要一個游標來執(zhí)行 sql 命令,
所以我們要用 conn 的 cursor 函數(shù)創(chuàng)建一個游標。
conn 就是剛才 2.1 中創(chuàng)建的保存數(shù)據庫的變量,你要用你定義的變量名,
再定義一個變量表示這個游標。
公式:
變量 = 數(shù)據庫變量.cursor()
2.3創(chuàng)建 table
先放代碼
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ù)據庫名.db')
#創(chuàng)建一個游標 cursor
cur = conn.cursor()
if (check("數(shù)據庫名.db","Table名") == False):
sql_text_1 = '''CREATE TABLE 你的table名
(xx XX,
xx XX);'''
# 執(zhí)行sql語句
cur.execute(sql_text_1)代碼比較長,因為我把 2.1 和 2.2 的兩行代碼也加了上去。
我們需要 table(表)來存數(shù)據,創(chuàng)建 table 的代碼如下:
變量名 = '''CREATE TABLE 你的table名
(xx XX,
xx XX);'''
# 執(zhí)行sql語句
cur.execute(上面的變量名)上面是用一個變量保存了創(chuàng)建 table 的 sql 語句,
下面使用 cur(就是剛才那個游標).execute() 函數(shù)執(zhí)行創(chuàng)建 table 的語句。
我們也可以使用 cur.executemany 函數(shù)來同時執(zhí)行多條 sql 語句。
sql 語句的內容,比如創(chuàng)建表的格式是上面這樣的
格式:' ' 'CREATE TABLE 你的 table 名 (xx XX, xx XX);' ' '
這行代碼里小寫的 xx 就是你要的屬性名,比如你的數(shù)據庫是這樣
| 姓名 | 班級 |
| 張三 | 1 |
其中,屬性名就是 “姓名” 和 “班級”,
小寫的 xx 就應該分別寫姓名和班級(注意,不帶引號)
后面的大寫的XX就是這個屬性所接受的數(shù)據的類型,
就相當于Python中的 int 類型和 str 類型。
只不過,我們在 sql 語句中,把 int 類型改成了 NUMBER,把 str 類型改成了 TEXT。
當我們運行這個代碼,我們的文件夾目錄里會多出來一個 你的數(shù)據庫名.db 文件
當我們再次運行,會發(fā)現(xiàn)程序報錯了。
報錯信息的大概意思是:table 已經存在了。
這是因為我們第一次運行時已經創(chuàng)建了 table ,我們再次運行時,
程序會再次創(chuàng)建同名 table,就會報錯。
所以,我們創(chuàng)建 table 之前要判斷一下這個table存不存在,如果存在就不創(chuàng)建,如果不存在就創(chuàng)建
這個判斷我把它寫成了一個函數(shù),就是我上面代碼那個 check 函數(shù)。
這一步也是我想了好長時間,還找資料找了好長時間才知道的
2.4插入數(shù)據
先放代碼
cur.executemany('INSERT INTO 你的table名 VALUES (?,?)', data)
conn.commit()其中第一行代碼中 executemany() 函數(shù)的意思就是同時執(zhí)行多個 sql 語句。
這個函數(shù)的括號里寫的逗號前面就是插入數(shù)據的 sql 語句,后面 data 可以是一個列表或者元組。注意,如果是列表的話,必須是列表里面有若干個元組的形式。
插入數(shù)據的 sql 語句的使用:
INSERT INTO 你的table名 VALUES (若干個逗號,用逗號分割)
這里我們要插入 data 這些數(shù)據,所以在括號里我們使用問號 “?” 來代替這個元素。
大家可以回去看一下 2.3 創(chuàng)建table 的講解,在2.3中,我們創(chuàng)建了兩個屬性,分別是 “姓名” 和 “班級”。因為我們有兩個屬性,所以要有兩個問號。
2.5查找數(shù)據
先放代碼
def find_tb():
cur.execute("select * from 你的table名")
# 提取查詢到的數(shù)據
return cur.fetchall()這個就很簡單了,我寫這個函數(shù)使用時可以把你那個table里的所有數(shù)據都取出來。
第一行是查找table的 sql 語句,格式是:
select * from 你的table名
下一行再用 fetchall() 函數(shù)把數(shù)據提取出來,直接 return 即可。
快樂的coding時間!
好了,前面的東西大家應該也都看完了,來點 demo ?
順便說一下,我這個 demo 的靈感來源是最近在網上刷到很多高考查分的視頻,恰好最近在做這個數(shù)據庫,所以說我這個 demo 受考試的啟發(fā),就做了一個學生分數(shù)系統(tǒng),其實這個特別爽,可以把自己的分數(shù)改成全部滿分!雖然實際沒啥用,但是還是很爽的
代碼里沒有我沒講過的部分,大家可以對照上面的講解看代碼,VScode無報錯運行。
對了,如果有看不懂的可以私信我,不出意外的話一天之內就能回復。
代碼:
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ù)據
return cur.fetchall()
def zcd():
os.system('cls')
print("學生分數(shù)管理系統(tǒng)")
print("1.增加學生分數(shù)信息")
print("2.查看全部學生分數(shù)")
print("3.查詢分數(shù)段內學生分數(shù)")
print("4.退出")
if __name__ == '__main__':
# 創(chuàng)建與數(shù)據庫的連接
conn = sqlite3.connect('stuents_scores.db')
#創(chuàng)建一個游標 cursor
cur = conn.cursor()
# 如果沒有表則執(zhí)行建表的sql語句
if (check("stuents_scores.db","scores") == False):
sql_text_1 = '''CREATE TABLE scores
(姓名 TEXT,
班級 TEXT,
性別 TEXT,
語文 NUMBER,
數(shù)學 NUMBER,
英語 NUMBER,
總分 NUMBER);'''
# 執(zhí)行sql語句
cur.execute(sql_text_1)
zcd()
while True:
op = int(input("請輸入:"))
if op == 1:
S_name = input("請輸入要添加的學生的姓名(如:張三):")
S_class = input("請輸入要添加的學生的班級(如:一班):")
S_xb = input("請輸入該學生性別:")
S_Chinese = int(input("請輸入該學生語文成績(只輸入一個數(shù)字,如:82):"))
S_Maths = int(input("請輸入該學生數(shù)學成績(只輸入一個數(shù)字,如:95):"))
S_English = int(input("請輸入該學生英語成績(只輸入一個數(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("全部學生信息(排名不分前后):")
for i in range(len(info_list)):
print("第"+str(i+1)+"個:")
print("學生姓名:"+str(info_list[i][0]))
print("學生班級:"+str(info_list[i][1]))
print("學生性別:"+str(info_list[i][2]))
print("學生語文成績:"+str(info_list[i][3]))
print("學生數(shù)學成績:"+str(info_list[i][4]))
print("學生英語成績:"+str(info_list[i][5]))
print("學生總成績:"+str(info_list[i][6]))
os.system('pause')
os.system('cls')
zcd()
elif op == 3:
info_list = find_tb()
fen = int(input("你要要查詢總成績高于n分的學生, 請輸入n:"))
for i in range(len(info_list)):
if info_list[i][6] >= fen:
print("查詢結果:")
print("第"+str(i+1)+"個:")
print("學生總成績:"+str(info_list[i][6]))
os.system('pause')
os.system('cls')
zcd()
elif op == 4:
os.system('cls')
break
最后
到此這篇關于Python數(shù)據庫sqlite3詳解的文章就介紹到這了,更多相關Python數(shù)據庫sqlite3內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Python中如何使用sqlite3操作SQLite數(shù)據庫詳解
- 使用Python連接SQLite數(shù)據庫的操作步驟
- 通過python封裝SQLite3的示例代碼
- Python數(shù)據庫編程之SQLite和MySQL的實踐指南
- Python的sqlite3模塊中常用函數(shù)
- Python中SQLite數(shù)據庫的使用
- Python使用sqlite3第三方庫讀寫SQLite數(shù)據庫的方法步驟
- Python練習之操作SQLite數(shù)據庫
- python處理SQLite數(shù)據庫的方法
- SQLite5-使用Python來讀寫數(shù)據庫
- Pandas使用SQLite3實戰(zhàn)
相關文章
簡單聊聊PyTorch里面的torch.nn.Parameter()
torch.nn.parameter是一個被用作神經網絡模塊參數(shù)的tensor,這是一種tensor的子類,下面這篇文章主要給大家介紹了關于PyTorch里面的torch.nn.Parameter()的相關資料,需要的朋友可以參考下2022-02-02
python如何使用import引入其他目錄文件或自定義模塊
這篇文章主要介紹了python如何使用import引入其他目錄文件或自定義模塊方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02
使用python/pytorch讀取數(shù)據集的示例代碼
這篇文章主要為大家詳細介紹了使用python/pytorch讀取數(shù)據集的示例,文中的示例代碼講解詳細,具有一定參考價值,感興趣的小伙伴可以跟隨小編一起學習一下2023-12-12

