【问题标题】:Is there a difference between linux and windows version of SQLitelinux和windows版本的SQLite有区别吗
【发布时间】:2021-04-07 22:18:02
【问题描述】:

如标题所示,我的脚本可以在我的 Windows 机器上运行,但不能在我的 Ubuntu 服务器上运行。它无法处理我的 SQL 命令:

import sqlite3
conn = sqlite3.connect('data.db')
c = conn.cursor()

c.execute("""
        select distinct user_id
        from
            ( select *,
                    count(1) over (partition by user_log) as occurs
                from rank2_log
            ) AS id
        where occurs > 2; """)

错误:

 File "/root/Log/log.py", line 91, in check_all
14|log |     where occurs > 2;""")
14|log | sqlite3.OperationalError: near "(": syntax error

我检查了 SQLite 模块版本,它们是相同的( 2. 6 .0 )。由于某种原因,还尝试将其从多行更改为普通注释,但这也不起作用。

【问题讨论】:

  • 为什么不使用普通组?
  • @Selvin 这不是我的命令,我对 SQL 的了解不够深入,无法执行此类高级操作。
  • 错误不是来自该代码。错误中的“where”是小写的。
  • 这不是一个好计划。您太容易“调整”实际上导致错误的一件小事。
  • 好吧,这里没有语法错误,除非您的文件中有一些奇怪的字符。您的源文件是否有 Unix 行结尾或 WINdows?

标签: python sql sqlite


【解决方案1】:

你只安装了 sqlite3 模块,还是你也有 cli 工具? 我会首先从命令行运行 sqlite3,然后尝试运行该查询。 如果可行,则验证您使用的 sqlite3 版本。

只是仔细检查一下,输出是什么 点子列表 | grep sqlite3 和 点子列表 | grep sqlite3 ? 在 windows 和 ubuntu 上?

如果模块完全相同,输入文件完全相同,那么我认为问题在于python版本。

此外,我同意@TimRoberts 提到的观点。检查 python 文件的行尾。您可以按照以下链接获取有关如何操作的 stackexchange 答案:

How to find out line-endings in a text file?

【讨论】:

  • 我在检查版本时使用了 sqlite3.version 而不是 sqlite3.sqlite_version... 结果我的 windows 版本是 3.32.3,linux 是 3.22.0 。我会尝试弄清楚如何将其更新到较新的版本,谢谢!有点跑题了,我应该如何再次使用 pip 检查版本? pip list 返回我认为的用户安装模块列表,并且 sqlite 是预安装的。
  • 如果您执行 pip install [module],并且该模块已经安装,您应该会收到一条消息,说明要求已经满足,并且应该说明版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 1970-01-01
  • 2013-06-25
  • 2022-06-30
  • 1970-01-01
  • 2020-12-01
  • 2020-07-22
相关资源
最近更新 更多