參考資料:https://www.liaoxuefeng.com/wiki/1016959663602400/1017801751919456 https://www.cnblogs.com/liaocheng/p/5198574.html
SQLite是一個進程內的庫,實現了自給自足的、無服務器的、零配置的、事務性的 SQL 數據庫引擎。它是一個零配置的數據庫,這意味着與其他數據庫一樣,您不需要在系統中配置。
就像其他數據庫,SQLite 引擎不是一個獨立的進程,可以按應用程序需求進行靜態或動態連接。SQLite 直接訪問其存儲文件,它有以下優勢
-
不需要一個單獨的服務器進程或操作的系統(無服務器的)。
-
SQLite 不需要配置,這意味着不需要安裝或管理。
-
一個完整的 SQLite 數據庫是存儲在一個單一的跨平台的磁盤文件。
-
SQLite 是非常小的,是輕量級的,完全配置時小於 400KiB,省略可選功能配置時小於250KiB。
-
SQLite 是自給自足的,這意味着不需要任何外部的依賴。
-
SQLite 事務是完全兼容 ACID 的,允許從多個進程或線程安全訪問。
-
SQLite 支持 SQL92(SQL2)標准的大多數查詢語言的功能。
-
SQLite 使用 ANSI-C 編寫的,並提供了簡單和易於使用的 API。
-
SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中運行。
python自帶sqlite3這個庫,無需導入,只要在前面import一下就好了
然后就是對數據庫的操作,首先就是創建數據庫
cx= sqlite3.connect("E:/test.db") 這行代碼表示打開目標路徑里的test.db文件,如果沒有該文件,就會自動創建一個。當然也可以創建在內存中,cx = sqlite3.connect(":memory:")
sqlite有四種操作,commit(),rollback(),close()和cursor()。
commit為事務提交,每次執行sql語句后需要提交,然后操作結束時需要close,cursor是游標
用cu = cx.cursor()創建一個游標,游標對應操作如下
#execute()--執行sql語句
#executemany--執行多條sql語句
#close()--關閉游標
#fetchone()--從結果中取一條記錄,並將游標指向下一條記錄
#fetchmany()--從結果中取多條記錄
#fetchall()--從結果中取出所有記錄
#scroll()--游標滾動
用這些即可完成對sqlite的基本操作
給自己列了一個模板,以便日后使用
import sqlite3 import tkinter import tkinter.messagebox import pymysql import os #本文教程 #https://www.cnblogs.com/liaocheng/p/5198574.html #commit() 事務提交 #roolback() 事務回滾 #close() 關閉數據庫連接 #cursor() 創建一個游標 #若數據庫不存在,則自動創建一個數據庫 cx = sqlite3.connect("text"); #游標操作 #-------*------ #execute()--執行sql語句 #executemany--執行多條sql語句 #close()--關閉游標 #fetchone()--從結果中取一條記錄,並將游標指向下一條記錄 #fetchmany()--從結果中取多條記錄 #fetchall()--從結果中取出所有記錄 #scroll()--游標滾動 #創建游標 cu = cx.cursor() #建表 test 含id name nickname try: cu.execute("create table test (id integer,name varchar(10),nickname blob )") except: print("表已存在") lb = "libo" for t in [(2,lb,"123123"),(3,'12311','12312')]: cx.execute("insert into test values (?,?,?)",t) cx.commit() sql1 = "select name from test" cu.execute(sql1) x = cu.fetchall() print(x) def tk(): window = tkinter.Tk() window.geometry("400x300") tkinter.Label(window,text='用戶名:').place(x=100,y=80) username = tkinter.StringVar() entryname = tkinter.Entry(window,textvariable = username) entryname.place(x=150,y=80) username.set(x) tk()
emmmm,自己寫了一個記密碼的程序用來測驗對sqlite的操作,有興趣可以看下
需要用到tkinter庫,需要另外pip inastall一下
import sqlite3 import tkinter import tkinter.messagebox import pymysql import os window = tkinter.Tk() def userpass(): window.geometry("400x300") canvas = tkinter.Canvas(window,height=300,width=500) imagefile = tkinter.PhotoImage(file = "pokemon.png") image = canvas.create_image(0,0,anchor='nw',image=imagefile) canvas.pack(side='left') tkinter.Label(window,text='用戶名:').place(x=100,y=80) tkinter.Label(window,text='密碼:').place(x=100,y=140) username = tkinter.StringVar() entryname = tkinter.Entry(window,textvariable = username) entryname.place(x=150,y=80) password = tkinter.StringVar() entrypass = tkinter.Entry(window,textvariable = password,show = '*') entrypass.place(x=150,y=140) def register(): #輸入框獲取用戶名密碼 usernameg = username.get() passwordg = password.get() print(usernameg,passwordg) #創建數據庫 cx = sqlite3.connect("password.db"); #創建游標 cu = cx.cursor() #創建數據庫 try: cu.execute("create table uspass (name varchar(10),password text )") except: print("表已存在,數據也已存入") t = (usernameg,passwordg) cx.execute("insert into uspass values (?,?)",t) cx.commit() def login(): usernameg = username.get() passwordg = password.get() cx = sqlite3.connect("password.db"); #創建游標 cu = cx.cursor() #創建數據庫 sql1 = "select * from uspass" cu.execute(sql1) x = cu.fetchall() if x[0][0] == usernameg and x[0][1] == passwordg: window.destroy() manage() else: tkinter.messagebox.showerror(message='賬號錯誤') #print("這就登錄了") student = tkinter.Button(window,text ="注冊&新增", command = register) student.place(x=110,y=200) student = tkinter.Button(window,text ="登錄", command = login) student.place(x=230,y=200) window.mainloop() def manage(): man_win = tkinter.Tk() man_win.geometry("400x300") name = tkinter.StringVar() entryname = tkinter.Entry(man_win,textvariable = name) entryname.place(x=150,y=40) tkinter.Label(man_win,text='用戶名:').place(x=100,y=80) tkinter.Label(man_win,text='密碼:').place(x=100,y=140) username = tkinter.StringVar() entryname = tkinter.Entry(man_win,textvariable = username) entryname.place(x=150,y=80) password = tkinter.StringVar() entrypass = tkinter.Entry(man_win,textvariable = password) entrypass.place(x=150,y=140) cx = sqlite3.connect("password.db"); cu = cx.cursor() sql = "select name from uspass" cu.execute(sql) x = cu.fetchall() name.set(x) def cha(): user = username.get() cx = sqlite3.connect("password.db"); cu = cx.cursor() sql = "select password from uspass where name = '" + user+"'" #print(sql) cu.execute(sql) x = cu.fetchall() password.set(x) def zeng(): user = username.get() passw = password.get() cx = sqlite3.connect("password.db"); cu = cx.cursor() t = (user,passw) cx.execute("insert into uspass values (?,?)", t) cx.commit() def gai(): user = username.get() passw = password.get() cx = sqlite3.connect("password.db"); cu = cx.cursor() sql = "update uspass set password='"+passw+"'"+ "where name ='" +user+"'" #print(sql) cu.execute(sql) cx.commit() cha = tkinter.Button(man_win,text ="查詢", command = cha) zeng = tkinter.Button(man_win,text = "添加",command = zeng ) gai = tkinter.Button(man_win,text = "修改",command = gai ) cha.place(x=110,y=200) zeng.place(x=180,y=200) gai.place(x=250,y=200) window.mainloop() userpass() os.system("pause")