【问题标题】:SQLite3 syntax error on tested sql script测试的 sql 脚本上的 SQLite3 语法错误
【发布时间】:2019-08-21 02:00:58
【问题描述】:

我正在使用 python 3.6.4 和 sqlite3 2.6.0 在 sqlite 3.27.2 文件中查询我的表中最近的连续日期。

我尝试使用 vscode 调试器获取实际的 sql 字符串并使用 DB Browser for SQLite 对其进行测试。它按我的预期工作。

代码如下:

sql =  'WITH \
            dates(cast_date) AS (\
                SELECT DISTINCT play_date\
                FROM TimeTable\
            ),\
            groups AS (\
                SELECT\
                    date(cast_date, \'-\'||(ROW_NUMBER() OVER (ORDER BY cast_date))||\' days\') AS grp,\
                    cast_date\
                FROM dates\
            )\
        SELECT\
            MIN(cast_date) AS date_start,\
            MAX(cast_date) AS date_end\
        FROM groups GROUP BY grp ORDER BY 2 DESC LIMIT 1'

cursor = conn.cursor() 
result = []
try:
    cursor.execute(sql)
    result = cursor.fetchone()
except sqlite3.OperationalError:
    FileLogger.exception('Exception at '+__file__+' '+__name__)

发生异常:

cursor.execute(sql)
sqlite3.OperationalError: near "OVER": syntax error

【问题讨论】:

  • 您使用的是什么版本的 SQLite?并非所有版本都支持窗口函数。
  • 一般来说,如果你有一个多行的字符串,你可能想要使用三重引号('''""")。
  • 不相关但考虑使用'''(多行字符串)而不是反斜杠。它可以让你的生活更轻松。
  • 我现在使用的是 2.6.0 的 sqlite3 和 3.27.2 的 sqlite 文件。可悲的是''' 并没有解决这个问题。

标签: python sql sqlite


【解决方案1】:

窗口功能支持为first added to SQLite,发布版本为3.25.0 (2018-09-15),根据官方文档。

使用 Python 时,您使用的是 Python SQLite3 客户端库(随 Python 一起分发),而不是您的系统 SQLite3 安装。对于 Python 2.7,版本为 3.11.0,低于您所需的版本。

您可以尝试使用更新的 SQLite3 客户端库,如 suggested by these answers

【讨论】:

  • 我的代码在我升级 sqlite3 版本后工作。谢谢!
猜你喜欢
  • 2012-03-24
  • 2017-12-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多