序言
继续搞项目, 今天遇到另一个问题, SQLite 的 SQL 语句不执行, 涉及到 default datetime。
补充一下, 当前是 SQLite 和 PyQt5 结合使用的, 后面应该会换成 pyside2。
现象
先上一段有问题的 SQL 语句:
CREATE TABLE IF NOT EXISTS FundAll
(id INTEGER PRIMARY KEY autoincrement, -- id
fund_code CHAR(6) NOT NULL, -- 基金代码
fund_short_name TEXT NOT NULL, -- 基金短名称
fund_name TEXT NOT NULL, -- 基金名称
fund_type TEXT NOT NULL, -- 基金类型
fund_long_name TEXT NOT NULL, -- 基金长名称
add_time DATE default datetime('now', 'localtime') NOT NULL, -- 添加时间
add_time_gmt DATE default datetime('now') NOT NULL, -- 添加 gmt 时间
modified_time DATE, -- 修改时间
modified_time_gmt DATE, -- 修改 gmt 时间
UNIQUE (fund_code) ON CONFLICT ABORT -- unique 约束,当 fund_code 重复时,无法操作数据库
);
这个语句在 PyQt5 中执行后会出现如下错误:
near "(": syntax error Unable to execute statement
当然我是使用了 QSqlQuery.lastError().text()
方法将错误打印出来的。
正确的语法应该是用括号将 datetime 包裹住, 如下:
CREATE TABLE IF NOT EXISTS FundAll
(id INTEGER PRIMARY KEY autoincrement, -- id
fund_code CHAR(6) NOT NULL, -- 基金代码
fund_short_name TEXT NOT NULL, -- 基金短名称
fund_name TEXT NOT NULL, -- 基金名称
fund_type TEXT NOT NULL, -- 基金类型
fund_long_name TEXT NOT NULL, -- 基金长名称
add_time DATE default (datetime('now', 'localtime')) NOT NULL, -- 添加时间
add_time_gmt DATE default (datetime('now')) NOT NULL, -- 添加 gmt 时间
modified_time DATE, -- 修改时间
modified_time_gmt DATE, -- 修改 gmt 时间
UNIQUE (fund_code) ON CONFLICT ABORT -- unique 约束,当 fund_code 重复时,无法操作数据库
);
再次运行 PyQt 程序, 一切正常了。
结语
代码还是要多练练, 没有经历过错误, 就不知道怎么解决, 记录下来, 当做经验。
如有错误,敬请指出,感谢指正! — 2022-05-18 21:16:21
最新评论
我想请问下。您这部署后能够上传附件图片吗?我按照您的方式部署后。能运行。但是无法上传附件,图片。
感谢教程,但是我安装后无法上传附件。图片什么的都上传不了。您这可以吗
你这个能够添加附件图片吗?我怎么无法上传图片附件呢。。
这个软件有bug的,客户端windows有些键不能用如逗号、句号
没有收到邮件通知
我的评论通知貌似坏掉了,定位一下问题
测试一下重新部署后的邮件功能
居然看到自己公司的MIB库,诚惶诚恐