【问题标题】:Python 3.6.3 unable to import _sqlite3 to run a SQlite db with sqlalchemyPython 3.6.3 无法导入 _sqlite3 以使用 sqlalchemy 运行 SQlite 数据库
【发布时间】:2021-12-06 05:37:49
【问题描述】:

我正在使用 pipenv 运行我的 Fast API 项目,并使用 Python 3.6.3 作为解释器。 对于生产,我使用一个工作正常的 postgres db。 现在我想用 pytest 和 sqlite 测试我的 api。

因此我更改了数据库连接设置:

engine = create_engine("sqlite:///./test.db")
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()
db = SessionLocal()

我也试过来自sqlalchemy官方docs的连接字符串:

engine = create_engine('sqlite://')

当我运行测试时,我收到以下错误:

   engine = create_engine("sqlite:///./test.db")
../../../../.local/share/virtualenvs/test-hhG2yARU/lib/python3.6/site-packages/sqlalchemy/util/deprecations.py:298: in warned
    return fn(*args, **kwargs)
../../../../.local/share/virtualenvs/test-hhG2yARU/lib/python3.6/site-packages/sqlalchemy/engine/create.py:560: in create_engine
    dbapi = dialect_cls.dbapi(**dbapi_args)
../../../../.local/share/virtualenvs/test-hhG2yARU/lib/python3.6/site-packages/sqlalchemy/dialects/sqlite/pysqlite.py:473: in dbapi
    from sqlite3 import dbapi2 as sqlite
../../../../.pyenv/versions/3.6.3/lib/python3.6/sqlite3/__init__.py:23: in <module>
    from sqlite3.dbapi2 import *
../../../../.pyenv/versions/3.6.3/lib/python3.6/sqlite3/dbapi2.py:27: in <module>
    from _sqlite3 import *
E   ModuleNotFoundError: No module named '_sqlite3'

我在源码中看到导致错误的模块有如下注释:

 pysqlite2/dbapi2.py: the DB-API 2.0 interface
#
# Copyright (C) 2004-2005 Gerhard Häring <gh@ghaering.de>
#
# This file is part of pysqlite.

这里的错误是由

引起的
from _sqlite3 import *

找不到 _sqlite。 我看过了

dbapi2.py 来自 pysqlite3 的文件。这里的 sqlite 是在没有“_”的情况下导入的。 所以我想从python3开始pysqlite3文件应该内置在python中。

有没有办法将 pysqlite2 更改为 3?我已经阅读了有关安装 pysqlite3 的信息,但这并没有改变我的情况。

我还尝试从 python 3.6.13 更新到 3.6.3,因为 3.6 是强制性的。这也没有改变行为。

【问题讨论】:

  • 如果你自己编译过python3,sqlite3开发头文件(和库)需要可用。根据您使用的发行版,它应该在libsqlite3-dev 或类似名称下可用。见stackoverflow.com/questions/1210664/no-module-named-sqlite3
  • 我用pyenv安装了python。
  • 这是否意味着我必须手动添加它们?

标签: python sqlite sqlalchemy fastapi


【解决方案1】:

我能够通过@MatsLindh 提供的信息解决它 这是带有解决方案的原始comment。 我已经安装了

sudo apt-get install libsqlite3-dev

然后用 pyenv 重新安装了我的 python 版本

【讨论】:

    猜你喜欢
    • 2021-09-12
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-06
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多