python調用sqlite


參考資料: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")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM