python 操作sqlite数据库

安装与使用

 

1.导入Python SQLITE数据库模块

     Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~

import sqlite3

 

2. 创建/打开数据库

     在调用connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建一个再打开。

cx = sqlite3.connect("E:/test.db")
     也可以创建数据库在内存中。
con = sqlite3.connect(":memory:")

 

3.数据库连接对象

    打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作:

  1. commit()--事务提交   
  2. rollback()--事务回滚   
  3. close()--关闭一个数据库连接   
  4. cursor()--创建一个游标

    关于commit(),如果isolation_level隔离级别默认,那么每次对数据库的操作,都需要使用该命令,你也可以设置isolation_level=None,这样就变为自动提交模式。

 

4.使用游标查询数据库

    我们需要使用游标对象SQL语句查询数据库,获得查询对象。 通过以下方法来定义一个游标。

cu=cx.cursor()

 

     游标对象有以下的操作:
  1. execute()--执行sql语句   
  2. executemany--执行多条sql语句   
  3. close()--关闭游标   
  4. fetchone()--从结果中取一条记录,并将游标指向下一条记录   
  5. fetchmany()--从结果中取多条记录   
  6. fetchall()--从结果中取出所有记录   
  7. scroll()--游标滚动   

知识点分享完毕

记录一下之前发生的事情

有一次遇到要造一些数据来观察程序的上报情况

我问开发,你这边程序性能怎样?造多少条数据合适?开发说,大概10w条吧.

好家伙说干就干,中途遇到了性能问题,经过优化最后只需要几秒钟生成10w条数据.

最后源码如下:

import sqlite3
from hashlib import md5
from datetime import datetime
 
 
# 生成MD5
def make_md5(s, encoding='utf-8'):
    # 返回MD5值
    return md5(s.encode(encoding)).hexdigest()
 
 
# 主函数
if __name__ == '__main__':
 
    start_time = datetime.now()     # 开始时间
    print(start_time)
 
    # 链接数据库
    db_path = 'D:/YJFRN/RNCore/data/data.db'   # 数据库路径
    db = sqlite3.connect(db_path)   # 链接数据库
    cursor = db.cursor()    # 获取操作游标 游标就是当前操作的行
 
    # 需要插入的数据
    ID = 0  # 初始编号
    CMD1 = 1070
    CMD2 = 1052
    CMD3 = 1052
    SID = 0
    UPDATA1 =  'CAASDjUxMDE4NTEwODg4ODg4GpgBChI0MzA0MjQxOTg5MDIyNTc0MzgSB1dJTi0xMjIaDTE3Mi4xNi42MS4xMjIiETAwLTBDLTI5LT' \
               'MxLTY2LTA4KgnnqILpn7bls7AwbzoSNDMwNDI0MTk4OTAyMjU3NDM4QJKnmIUGSiQKBuS4iue6vxAAGIXg+oUGIgdXSU4tMTIyKAEw' \
              'heD6habBgQZQAFgBYANqBAoAEgA= '
    UPDATA2 =  'CnEIARABGJOnmIUGIhLnnJ/lrp7ouqvku73miqXoraYobzISNDMwNDI0MTk4OTAyMjU3NDM4OgBCIgoG5LiK57q/EAAYheD6hQYiB1' \
              'dJTi0xMjIwheD6habBgQZKAFABWgbkuIrnur9iCeeogumftuWzsA=='
    UPDATA3 =  'CnEIBhABGJOnmIUGIhLnnJ/lrp7ouqvku73miqXoraYobzISNDMwNDI0MTk4OTAyMjU3NDM4OgBCIgoG5LiK57q/EAAYheD6hQYiB1' \
              'dJTi0xMjIwheD6habBgQZKAFAGWgbkuIrnur9iCeeogumftuWzsA=='
    DOWNDATA1 =  'CAASDjUxMDE4NTEwODg4ODg4GpYBChI0MzA0MjQxOTg5MDIyNTc0MzgSB1dJTi0xMjIaDTE3Mi4xNi42MS4xMjIiETAwLTBDLTI5' \
                 'LTMxLTY2LTA4KgnnqILpn7bls7AwbzoSNDMwNDI0MTk4OTAyMjU3NDM4QM2UnoUGSiIKBuS4i+e6vxAAGILg48QHIgdXSU4tMTIy' \
                'MILg48SnwYEGUAFYAWADagQKABIA'
    DOWNDATA2 =  'CnQIARABGM2UnoUGIhLnnJ/lrp7ouqvku73miqXoraYobzISNDMwNDI0MTk4OTAyMjU3NDM4OgBCJQoJ5raT5ays5ZqOEAAYguDj' \
                'xAciB1dJTi0xMjIwguDjxKfBgQZKAFABWgbkuIvnur9iCeeogumftuWzsA=='
    DOWNDATA3 =  'CnQIBhABGM2UnoUGIhLnnJ/lrp7ouqvku73miqXoraYobzISNDMwNDI0MTk4OTAyMjU3NDM4OgBCJQoJ5raT5ays5ZqOEAAYguDj' \
                'xAciB1dJTi0xMjIwguDjxKfBgQZKAFAGWgbkuIvnur9iCeeogumftuWzsA=='
 
    try:
        # 查询数据
        cursor.execute('select * from cmd_table')
        re = cursor.fetchall()
        for i in re:
            print(i)
 
        # 清空表数据
        sql = "delete from cmd_table;"
        cursor.execute(sql)
 
    except BaseException as e:
        print(e)
        # 清空失败则创建表
        sql = 'CREATE TABLE "cmd_table" (' \
              '"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, ' \
              '"cmd" integer NOT NULL, ' \
              '"sid" integer NOT NULL DEFAULT 0, ' \
              '"data" blob NOT NULL, ' \
              '"md5" TEXT NOT NULL );'
        cursor.execute(sql)
        print("创建表格成功")
 
    else:
        print("清空表数据成功")
 
 
    # 插入N次上下机数据
    for i in range(100000):
 
 
        # 上机数据插入3条
        ID = ID + 1
        MD5 = make_md5(str(ID))  # 对编号进行MD5加密
        sql = "INSERT INTO cmd_table(id,cmd,sid,data,md5)  VALUES(%d,%d,%d,'%s','%s');"
        sql = sql % (ID, CMD2, SID, UPDATA2, MD5)
        # print(sql)
        cursor.execute(sql)
 
 
        ID = ID + 1
        MD5 = make_md5(str(ID))  # 对编号进行MD5加密
        sql = "INSERT INTO cmd_table(id,cmd,sid,data,md5)  VALUES(%d,%d,%d,'%s','%s');"
        sql = sql % (ID, CMD2, SID, UPDATA2, MD5)
        cursor.execute(sql)
 
 
        ID = ID + 1
        MD5 = make_md5(str(ID))  # 对编号进行MD5加密
        sql = "INSERT INTO cmd_table(id,cmd,sid,data,md5)  VALUES(%d,%d,%d,'%s','%s');"
        sql = sql % (ID, CMD3, SID, UPDATA3, MD5)
        cursor.execute(sql)
 
 
        # 下机数据插入3条
        ID = ID + 1
        MD5 = make_md5(str(ID))  # 对编号进行MD5加密
        sql = "INSERT INTO cmd_table(id,cmd,sid,data,md5)  VALUES(%d,%d,%d,'%s','%s');"
        sql = sql % (ID, CMD1, SID, DOWNDATA1, MD5)
        cursor.execute(sql)
 
 
        ID = ID + 1
        MD5 = make_md5(str(ID))  # 对编号进行MD5加密
        sql = "INSERT INTO cmd_table(id,cmd,sid,data,md5)  VALUES(%d,%d,%d,'%s','%s');"
        sql = sql % (ID, CMD2, SID, DOWNDATA2, MD5)
        cursor.execute(sql)
 
 
        ID = ID + 1
        MD5 = make_md5(str(ID))  # 对编号进行MD5加密
        sql = "INSERT INTO cmd_table(id,cmd,sid,data,md5)  VALUES(%d,%d,%d,'%s','%s');"
        sql = sql % (ID, CMD3, SID, DOWNDATA3, MD5)
        cursor.execute(sql)
 
 
        # print("已执行循环次数:" + str(i))
 
 
    db.commit()     # 提交SQL操作 提交后才会生效
    cursor.close()  # 关闭游标
    db.close()      # 关闭链接
 
 
    end_time = datetime.now()   # 结束时间
    print(end_time)
 

 

posted @ 2022-01-07 09:53  还是张先森  阅读(384)  评论(0)    收藏  举报