python 是否使用QSqlQuery将当前时间添加到表中?

sgtfey8w  于 2022-12-28  发布在  Python
关注(0)|答案(2)|浏览(228)

下面无法将当前时间添加到test4表的dateTime中,如何修改?

query.exec_("INSERT INTO test values('abc@wdc.com','abc1',dt"))
from PyQt5.QtSql import QSqlDatabase, QSqlQuery
from datetime import datetime
database = QtSql.QSqlDatabase.addDatabase('QSQLITE')
database.setDatabaseName('test1.db')
database.open()
query = QSqlQuery()
query.exec_("CREATE TABLE IF NOT EXISTS test4(id varchar(50) PRIMARY KEY,password varchar(50),dateTime timestamp)")
dt=datetime.now()
query.exec_("INSERT INTO test VALUES('abc@wdc.com','abc1',dt"))
egmofgnx

egmofgnx1#

您不是在添加dt变量,而是在添加“dt”string
您的代码中还有另外两个问题:您导入了QSqlDatabase,但使用的是QtSql.QSqlDatabase,并且您要将值添加到test表中,而您创建的表是test4

from PyQt5.QtSql import QSqlDatabase, QSqlQuery
from datetime import datetime
database = QSqlDatabase.addDatabase('QSQLITE')
database.setDatabaseName('test1.db')
database.open()
query = QSqlQuery()
query.exec_("CREATE TABLE IF NOT EXISTS test4(id varchar(50) PRIMARY KEY,password varchar(50),dateTime timestamp)")
dt=datetime.now()
query.exec_("INSERT INTO test4 VALUES('abc@wdc.com','abc1','{}'".format(dt))

考虑到上面的代码将使用datetime对象的自然字符串表示:

2020-11-12 14:32:13.471729

这需要在变量两边加上引号,否则日期和时间之间的空格将被解释为文本查询 space(用于分隔命令),从而导致错误。您甚至可以使用isoformat()来实现更标准化的表示,从而允许使用fromisoformat()进一步重新转换为datetime对象。

9vw9lbht

9vw9lbht2#

我打赌一个更简单的解决方案是在创建表sql查询中设置一个默认值。从Sqlite v3.1.0开始,你现在可以添加current_timestamp。这将保存你在插入任何表时不必要的导入。

CREATE TABLE IF NOT EXISTS test4(
id varchar(50) PRIMARY KEY,
password varchar(50),
dateTime timestamp not null default current_timestamp
)

enter link description here所示

相关问题