一、使用前需要导入的模块
from PyQt5 import QtSql
from PyQt5.QtSql import QSqlQuery
二、sqlite的创建
db=QtSql.QSqlDatabase.addDatabase("QSQLITE")
db.setDatabaseName("mydatabase.db")
三、在sqlite数据库中创建表
create_table_sql = f'''CREATE TABLE IF NOT EXISTS {"我的测试"} (
id INTEGER PRIMARY KEY,
mytxt TEXT NOT NULL,
date_time DATETIME,
int_value INT(4),
float_value REAL
)'''
db.open()
query = QSqlQuery()
print(query.exec(create_table_sql))
在数据库中创建表格时,需要先构造 query
语句,然后实例化一个 QSqlQuery
类,使然后调用这个实例化之后的类的 exec()
方法,来执行构造好的 query
语句。在执行前,需要打开数据库。
另外 query.exec()
执行如果成功则会返回 True
,否则为 False
。
上面的代码执行后生成的表的结构如下:
四、在表中插入数据
插入数据的 query
语句需要指定数据要插入 的表,要插入的数据。如果给定了要插入的列名,则只会插入对应的值。
- 在表中插入数值一行的所有数据
import time,random
from PyQt5.QtCore import QDateTime
for i in range(60):
time_now = QDateTime.currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz")
query.exec(f'insert into {"我的测试"} values({"NULL"},"txt{i}","{time_now}",{random.randint(0,60)},{random.random()})')
time.sleep(0.5)
结果如下:
注意
query
语句,对于要插入的text数据,需要在该数据上添加引号。这里使用了f-string,大括号中的数据会先转化为字符串,比如txt{i}
,其格式化之后的字符串为txt1
(假设i为1),由于需要加引号所以需要如同上面代码中的一样添加引号。
由于我们的时间也是转化为字符串,所以同样要加引号。
- 在表中一次插入一行的部分数据
time_now = QDateTime.currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz")
query.exec(f'insert into {"我的测试"} ("{"mytxt"}","{"date_time"}","{"int_value"}") values("insert","{time_now}",{100})')
运行结果
五、删除表中满足一定条件的数据
print(query.exec(f'DELETE FROM 我的测试 WHERE mytxt="{"insert"}"'))
运行之后可以看到,表名为我的测试的表中,列mytxt中名为insert的行数据已经被删除。
六、更新表中满足一定条件的数据
下面的代码含义为,将表我的测试中,所有int_value值为16时,该行的float_value值设置为0。
print(query.exec(f'UPDATE 我的测试 SET float_value={0} WHERE int_value={16}'))
运行上面的代码前表内容:
运行代码后:
七、查询一定时间内的数据
data_around_time = "select * from 我的测试 where date_time >= '2021-12-02 12:10:46.000' and date_time
query.exec(data_around_time)
while query.next():
my_id = query.value('id')
int_value = query.value('int_value')
float_value = query.value('float_value')
date_time = query.value('date_time')
print(my_id, type(date_time), date_time, int_value, float_value)
上面的代码需要将时间在2021-12-02 12:10:46.000到2021-12-02 12:10:56.000之间的一些数据打印出来。
上面的查询语句也可以写成下面的形式:
"select * from 我的测试 where date_time between '2021-12-02 12:10:46.000' and '2021-12-02 12:10:56.000'"
这些数据对应在表中的值如下图:
打印出来的数据
注意:在查询一定时间范围的数据时,可以比较转换为字符串的时间数据,但是这些字符串的长度一定要一样,否则会出现问题。
另外,如果发现查询的数据不对时,一定好好看下自己的时间字符串,比如是否年月日处设置的不对。
八、其他
文章QSqlDatabase使用相关说明中提到,要把下面的文件放置到.exe下,不然会缺少驱动无法连接到数据库,不会报错,但是就是一直连不上!
我测试了一下,不用把这些文件和使用pyinstall生成的exe放一起也是可以用的。
; 九、使用的sqlite数据库可视化工具
SQLite Studio,可以在https://sqlitestudio.pl/下载
参考
Original: https://blog.csdn.net/g11023225/article/details/121674079
Author: g11023225
Title: QtSql中sqlite的简单使用
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815965/
转载文章受原作者版权保护。转载请注明原作者出处!