zoukankan      html  css  js  c++  java
  • 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")
  • 相关阅读:
    Windows Server 2012配置开机启动项
    Windows Server 2019 SSH Server
    NOIP2017 senior A 模拟赛 7.7 T1 棋盘
    Noip 2015 senior 复赛 Day2 子串
    Noip 2015 senior复赛 题解
    Noip 2014 senior Day2 解方程(equation)
    Noip 2014 senior Day2 寻找道路(road)
    Noip 2014 senior Day2 无线网络发射器选址(wireless)
    Noip2014senior复赛 飞扬的小鸟
    Noip 2014 senior 复赛 联合权值(link)
  • 原文地址:https://www.cnblogs.com/afei123/p/11186380.html
Copyright © 2011-2022 走看看