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")
  • 相关阅读:
    Android MediaScanner 详尽分析
    你要清楚的东西
    Centos下搭建Apache+mysql+php
    Centos 安装MySQL全过程
    sdk platform tools is missing please user the sdk manager to install it
    尚书令
    文字
    ubuntu下mysql配置
    学习Android开发,配置环境,
    Sphinx全文索引安装教程
  • 原文地址:https://www.cnblogs.com/afei123/p/11186380.html
Copyright © 2011-2022 走看看