irpas技术客

QtSql中sqlite的简单使用_g11023225_qtsql

irpas 2363

一、使用前需要导入的模块 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 <= '2021-12-02 12:10:56.000'" 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/下载

参考 QtSql 官方文档Qt中操作SQLite数据库QSqlDatabase使用相关说明


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #qtsql #使用前需要导入的模块from #pyqt5 #import #QtSqlfrom #PyQt5QtSql