【问题标题】:Python sqlite3: run different sqlite3 versionPython sqlite3:运行不同的 sqlite3 版本
【发布时间】:2015-05-30 16:49:06
【问题描述】:

我正在运行一个使用 sqlite 作为数据库之一的 Django 项目。我想在运行项目时运行最新的 SQLite 版本。我的意思是最新的 sqlite 二进制文件,而不是 sqlite python 库。

我有一个不是系统默认的本地 sqlite3 二进制文件,我无法更改默认的 sqlite3 版本。

我没有使用 Django 的 ORM,但已将其替换为独立的 SQLAlchemy 版本。

我找到了一个相关链接,但这与运行最新的 python sqlite 库版本有关。

How to upgrade sqlite3 in python 2.7.3 inside a virtualenv?

【问题讨论】:

  • 二进制文件是什么意思?如您所知,Python 不使用二进制文件,它使用自己的编译库。所以二进制文件与 Python 没有任何联系,我看不出这个问题与 Python 或 sqlalchemy 有什么关系。
  • 那么如何在 virtualenv 中更新/替换 python 编译的二进制文件?我提到了 SQLAlchemy、Python 和 Django,因为我不确定问题到底出在哪里。
  • Virtualenvs 用于 Python 代码。 Python 不使用二进制文件。如果您想替换 Python 用于运行代码的 sqlite 库的版本,该链接问题提供了准确答案。

标签: python sqlite sqlalchemy


【解决方案1】:

Python 不能直接使用 sqlite3 二进制文件。它总是使用与sqlite3 共享库链接的模块。这意味着您必须按照“How to upgrade sqlite3 in python 2.7.3 inside a virtualenv?”中的说明在您的 virtualenv 中创建 pysqlite 模块的版本。

然后您可以使用此导入

from pysqlite2 import dbapi2 as sqlite

用新的模块覆盖系统的默认sqlite 模块。

另一个选择是获取 Python 的源代码,编译所有内容并将文件 sqlite.so 复制到您的 virtualenv 中。这种方法的缺点是它很脆弱,很难被其他人重复。

【讨论】:

  • 这可能是一个您无法回答的问题,但是当使用构建在 pysqlite 之上的 SQLAlchemy 时,这将如何工作?
  • 请提出一个新问题,并向我们展示您用于设置 SQLAlchemy 的代码(即如何创建数据库连接)。
  • 对于那些在执行此导入时遇到undefined symbol: PyOS_mystrnicmp 错误的人,请参阅这个(当前未回答的)问题:stackoverflow.com/questions/39975712/…
【解决方案2】:

如果您在 Windows 上,请先尝试这条简单的路线:从 sqlite download page 获取 dll(它将位于“Windows 预编译二进制文件”标题下)并将其添加到 Anaconda 的 dll 路径(如 C:\Users\YourUserName\Anaconda3\DLLs) .那里的新版本已经启用了 FTS5 等好东西。

如果您使用的是 Linux,请参阅 Install Python and Sqlite from SourceCompiling SQLite for use with Python Applications

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多