参考资料: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的基本操作
给自己列了一个模板,以便日后使用
importsqlite3importtkinterimporttkinter.messageboximportpymysqlimportos#本文教程#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)deftk():
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一下
importsqlite3importtkinterimporttkinter.messageboximportpymysqlimportos
window=tkinter.Tk()defuserpass():
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)defregister():#输入框获取用户名密码
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()deflogin():
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()defmanage():
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)defcha():
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)defzeng():
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()defgai():
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")