参考资料: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")