序言
继续搞项目, 今天遇到另一个问题, 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库,诚惶诚恐
那可能是RobotFramework-ride的版本问题。我装的1.7.4.2,有这个限制。我有空再尝试下旧版本吧,感谢回复。
你好!我在python2.7中安装RobotFramework-ride的时候提示wxPython的版本最高是2.18.12,用pip下载的wxPython版本是4.10,而且我在那个路径下没有找到2
真的太好了,太感谢了,在bilibili和CSDN上都找遍了,终于在你这里找到了