欢迎光临!
若无相欠,怎会相见

SQLite 语句中带有 default datetime 执行出错

序言

继续搞项目, 今天遇到另一个问题, 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

赞(0) 打赏
转载请注明:飘零博客 » SQLite 语句中带有 default datetime 执行出错
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

欢迎光临