gpt4 book ai didi

python - 为什么我不能在 sqlite3 中使用 WITH 语句?

转载 作者:行者123 更新时间:2023-11-28 22:46:22 25 4
gpt4 key购买 nike

我正在尝试在 sqlite3 中执行以下查询:

WITH
MATCHES AS(
SELECT CSV2.*
, CSV1.ROW as ROW_1
, CSV1.C4 as C4_1
, CSV1.C5 as C5_1
FROM CSV2
LEFT JOIN CSV1
ON CSV1.C4 LIKE '%' || CSV2.C2 || '%'
),
EXACT AS(
SELECT *
FROM MATCHES
WHERE C4_1 = C5_1
),
MIN_ROW AS(
SELECT C1
, min(ROW_1) as ROW_1
FROM MATCHES
WHERE C1 NOT IN (SELECT C1 FROM EXACT)
GROUP BY C1, C2, C3, C4, C5
)
SELECT *
FROM EXACT
UNION
SELECT MATCHES.*
FROM MIN_ROW
INNER JOIN MATCHES
ON MIN_ROW.C1 = MATCHES.C1
AND (MIN_ROW.ROW_1 = MATCHES.ROW_1 OR MIN_ROW.ROW_1 IS NULL)
ORDER BY C1

但是我在“WITH”语句附近收到语法错误。

我正在使用 Python 和以下版本执行查询:

sqlite3.version是2.6.0,sqlite3.sqlite_version是3.6.21

最佳答案

sqlite3.version has given me 2.6.0 and sqlite3.sqlite_version has given 3.6.21. I have no idea why there are two different versions for it. I'm working on Python 2.7.

“为什么”是 explained in the docs : 第一个是 Python sqlite3 模块的版本(或者更确切地说,stdlib 模块跟踪的单独开发的 pysqlite 模块);第二个是构建 Python(或 pysqlite)所针对的 SQLite 库本身的版本号。 Python 几乎可以针对任何版本的 sqlite 构建。*因此,您可以使用带有 SQLite 3.2 的 Python 2.7.9,或者带有 SQLite 3.8 的 2.7.5。

大多数 Windows 用户使用官方 Python 二进制版本,而不是自己构建它。这些通常有一个非常新的版本,但如果您使用的是一个古老的二进制文件,它可能是用一个古老的 sqlite 构建的。

这就是这里的关键。如果你看the changelog ,您可以看到“添加了对公用表表达式和 WITH 子句的支持”直到 3.8.3 才出现,而您使用的是 3.6.21。

那么,您有哪些选择?

  • 获取使用 sqlite 3.8.3 或更高版本构建的更新的 Python 二进制文件。我认为当前的 Windows 2.7.9 官方二进制文件应该符合条件。
  • 自己针对较新的 sqlite 构建 Python。
  • 使用 sqlite 3.8.3 或更高版本获取或构建第三方 pysqlite 模块,并使用 pysqlite.sqlite3 而不仅仅是 sqlite3 .我假设 Christoph Gohlke's 中的包裹存储库足够新,但我不会保证。

* 嗯,3.0 或更高版本。有一段时间,如果您尝试针对 3.0-3.4 进行构建,Python 2.7 会被破坏,但他们有意修复了该问题,以允许人们使用他们平台的古老 sqlite 构建最新的 Python。

关于python - 为什么我不能在 sqlite3 中使用 WITH 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27539139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com