QtSql中sqlite的简单使用

一、使用前需要导入的模块

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
上面的代码执行后生成的表的结构如下:
QtSql中sqlite的简单使用_第1张图片

四、在表中插入数据

插入数据的query语句需要指定数据要插入 的表,要插入的数据。如果给定了要插入的列名,则只会插入对应的值。

  1. 在表中插入数值一行的所有数据
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)

结果如下:
QtSql中sqlite的简单使用_第2张图片

注意query语句,对于要插入的text数据,需要在该数据上添加引号。这里使用了f-string,大括号中的数据会先转化为字符串,比如txt{i},其格式化之后的字符串为txt1(假设i为1),由于需要加引号所以需要如同上面代码中的一样添加引号。
由于我们的时间也是转化为字符串,所以同样要加引号。

  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})')

运行结果
QtSql中sqlite的简单使用_第3张图片

五、删除表中满足一定条件的数据

print(query.exec(f'DELETE FROM 我的测试 WHERE mytxt="{"insert"}"'))

运行之后可以看到,表名为我的测试的表中,列mytxt中名为insert的行数据已经被删除。
QtSql中sqlite的简单使用_第4张图片

六、更新表中满足一定条件的数据

下面的代码含义为,将表我的测试中,所有int_value值为16时,该行的float_value值设置为0。

print(query.exec(f'UPDATE 我的测试 SET float_value={0} WHERE int_value={16}'))

运行上面的代码前表内容:
QtSql中sqlite的简单使用_第5张图片
运行代码后:
QtSql中sqlite的简单使用_第6张图片

七、查询一定时间内的数据

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'"
这些数据对应在表中的值如下图:
QtSql中sqlite的简单使用_第7张图片
打印出来的数据
QtSql中sqlite的简单使用_第8张图片

注意:在查询一定时间范围的数据时,可以比较转换为字符串的时间数据,但是这些字符串的长度一定要一样,否则会出现问题。
另外,如果发现查询的数据不对时,一定好好看下自己的时间字符串,比如是否年月日处设置的不对。

八、其他

文章QSqlDatabase使用相关说明中提到,要把下面的文件放置到.exe下,不然会缺少驱动无法连接到数据库,不会报错,但是就是一直连不上!
我测试了一下,不用把这些文件和使用pyinstall生成的exe放一起也是可以用的。
QtSql中sqlite的简单使用_第9张图片

九、使用的sqlite数据库可视化工具

SQLite Studio,可以在https://sqlitestudio.pl/下载

参考

  1. QtSql 官方文档
  2. Qt中操作SQLite数据库
  3. QSqlDatabase使用相关说明

你可能感兴趣的:(pyqt5,python,sqlite,python,pyqt5,sqlite3)