您好,登錄后才能下訂單哦!
本篇內容介紹了“Python數據庫sqlite3怎么創建并使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
sqlite3 數據庫是 Python 自帶的數據庫,甚至不需要額外安裝模塊,而且操作簡單。
import sqlite3
首先打開我們的編譯器(推薦使用vscode,因為數據庫文件后綴是 .db,vscode里顯示比較清楚)
先放上代碼
conn = sqlite3.connect('test.db')
使用 sqlite3 的 connect 函數可以創建數據庫或者連接數據庫,
如果這個數據庫存在,就連接這個數據庫,
如果這個庫不存在,就創建數據庫。
右邊小括號里的是數據庫名。
我們把這個保存在變量 conn 里,這個變量名可以自己起
公式:
變量名 = sqlite3.connect( '你要的數據庫名.db' )
還是先放代碼
cur = conn.cursor()
在 2.1 中,我們創建了與數據庫的連接,我們現在還需要一個游標來執行 sql 命令,
所以我們要用 conn 的 cursor 函數創建一個游標。
conn 就是剛才 2.1 中創建的保存數據庫的變量,你要用你定義的變量名,
再定義一個變量表示這個游標。
公式:
變量 = 數據庫變量.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('數據庫名.db') #創建一個游標 cursor cur = conn.cursor() if (check("數據庫名.db","Table名") == False): sql_text_1 = '''CREATE TABLE 你的table名 (xx XX, xx XX);''' # 執行sql語句 cur.execute(sql_text_1)
代碼比較長,因為我把 2.1 和 2.2 的兩行代碼也加了上去。
我們需要 table(表)來存數據,創建 table 的代碼如下:
變量名 = '''CREATE TABLE 你的table名 (xx XX, xx XX);''' # 執行sql語句 cur.execute(上面的變量名)
上面是用一個變量保存了創建 table 的 sql 語句,
下面使用 cur(就是剛才那個游標).execute() 函數執行創建 table 的語句。
我們也可以使用 cur.executemany 函數來同時執行多條 sql 語句。
sql 語句的內容,比如創建表的格式是上面這樣的
格式:' ' 'CREATE TABLE 你的 table 名 (xx XX, xx XX);' ' '
這行代碼里小寫的 xx 就是你要的屬性名,比如你的數據庫是這樣
姓名 | 班級 |
張三 | 1 |
其中,屬性名就是 “姓名” 和 “班級”,
小寫的 xx 就應該分別寫姓名和班級(注意,不帶引號)
后面的大寫的XX就是這個屬性所接受的數據的類型,
就相當于Python中的 int 類型和 str 類型。
只不過,我們在 sql 語句中,把 int 類型改成了 NUMBER,把 str 類型改成了 TEXT。
當我們運行這個代碼,我們的文件夾目錄里會多出來一個 你的數據庫名.db 文件
當我們再次運行,會發現程序報錯了。
報錯信息的大概意思是:table 已經存在了。
這是因為我們第一次運行時已經創建了 table ,我們再次運行時,
程序會再次創建同名 table,就會報錯。
所以,我們創建 table 之前要判斷一下這個table存不存在,如果存在就不創建,如果不存在就創建
這個判斷我把它寫成了一個函數,就是我上面代碼那個 check 函數。
這一步也是我想了好長時間,還找資料找了好長時間才知道的
先放代碼
cur.executemany('INSERT INTO 你的table名 VALUES (?,?)', data) conn.commit()
其中第一行代碼中 executemany() 函數的意思就是同時執行多個 sql 語句。
這個函數的括號里寫的逗號前面就是插入數據的 sql 語句,后面 data 可以是一個列表或者元組。注意,如果是列表的話,必須是列表里面有若干個元組的形式。
插入數據的 sql 語句的使用:
INSERT INTO 你的table名 VALUES (若干個逗號,用逗號分割)
這里我們要插入 data 這些數據,所以在括號里我們使用問號 “?” 來代替這個元素。
大家可以回去看一下 2.3 創建table 的講解,在2.3中,我們創建了兩個屬性,分別是 “姓名” 和 “班級”。因為我們有兩個屬性,所以要有兩個問號。
先放代碼
def find_tb(): cur.execute("select * from 你的table名") # 提取查詢到的數據 return cur.fetchall()
這個就很簡單了,我寫這個函數使用時可以把你那個table里的所有數據都取出來。
第一行是查找table的 sql 語句,格式是:
select * from 你的table名
下一行再用 fetchall() 函數把數據提取出來,直接 return 即可。
好了,前面的東西大家應該也都看完了,來點 demo ?
順便說一下,我這個 demo 的靈感來源是最近在網上刷到很多高考查分的視頻,恰好最近在做這個數據庫,所以說我這個 demo 受考試的啟發,就做了一個學生分數系統,其實這個特別爽,可以把自己的分數改成全部滿分!雖然實際沒啥用,但是還是很爽的
代碼里沒有我沒講過的部分,大家可以對照上面的講解看代碼,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") # 提取查詢到的數據 return cur.fetchall() def zcd(): os.system('cls') print("學生分數管理系統") print("1.增加學生分數信息") print("2.查看全部學生分數") print("3.查詢分數段內學生分數") print("4.退出") if __name__ == '__main__': # 創建與數據庫的連接 conn = sqlite3.connect('stuents_scores.db') #創建一個游標 cursor cur = conn.cursor() # 如果沒有表則執行建表的sql語句 if (check("stuents_scores.db","scores") == False): sql_text_1 = '''CREATE TABLE scores (姓名 TEXT, 班級 TEXT, 性別 TEXT, 語文 NUMBER, 數學 NUMBER, 英語 NUMBER, 總分 NUMBER);''' # 執行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("請輸入該學生語文成績(只輸入一個數字,如:82):")) S_Maths = int(input("請輸入該學生數學成績(只輸入一個數字,如:95):")) S_English = int(input("請輸入該學生英語成績(只輸入一個數字,如: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("學生數學成績:"+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數據庫sqlite3怎么創建并使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。