python 操作sqlite数据库
安装与使用
1.导入Python SQLITE数据库模块
Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~
import sqlite3
2. 创建/打开数据库
在调用connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建一个再打开。
cx = sqlite3.connect("E:/test.db")
也可以创建数据库在内存中。
con = sqlite3.connect(":memory:")
3.数据库连接对象
打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作:
- commit()--事务提交
- rollback()--事务回滚
- close()--关闭一个数据库连接
- cursor()--创建一个游标
关于commit(),如果isolation_level隔离级别默认,那么每次对数据库的操作,都需要使用该命令,你也可以设置isolation_level=None,这样就变为自动提交模式。
4.使用游标查询数据库
我们需要使用游标对象SQL语句查询数据库,获得查询对象。 通过以下方法来定义一个游标。
cu=cx.cursor()
游标对象有以下的操作:
- execute()--执行sql语句
- executemany--执行多条sql语句
- close()--关闭游标
- fetchone()--从结果中取一条记录,并将游标指向下一条记录
- fetchmany()--从结果中取多条记录
- fetchall()--从结果中取出所有记录
- 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)
浙公网安备 33010602011771号