【问题标题】:Error while dumping out data from sqlite3从 sqlite3 转储数据时出错
【发布时间】:2015-11-23 23:15:09
【问题描述】:

我已经使用 sqlite3_connection.iterdump() 方法将 sqlite3 转储到数据库中。

我在 python 中编写了一个模块,用于转储 sqlite3 表。如果我在我的机器上本地运行该模块,它可以正常工作。

而且,在使用 pyinstaller 创建模块的 python 包后,如果我尝试转储数据库,则会出现错误提示

"ImportError: No module named sqlite3.dump"

知道如何解决这个问题。或者有没有其他方法可以获取 sqlite3 转储。

这是我要转储数据库的内容。

#Export database
def export_database(self):
    database_string = ""
    for line in self.conn.iterdump():
            database_string += '%s\n' % (line)
    return database_string

#Import database
def import_database(self, database_string):
    self.cursor.executescript(database_string)

【问题讨论】:

  • 那么,不使用你的包和 Pyinstaller,一切正常吗?我正在尝试将打包问题与模块 sqlite3 的任何其他潜在问题分开。
  • 是的,它有效!只有在创建包之后才会出现上述问题。
  • 尝试创建一个virtualenv,然后一旦你激活了virtualenv,尝试给出问题的命令,看看模块是否存在。由于我安装了不同的库,因此很难复制您的问题。
  • 这是我第一次使用虚拟环境。我尝试了以下。不知道你是不是同一个意思。让我知道我是否错了。我创建了一个虚拟环境 venv。并在激活它(venv/bin/activate)后将我的模块(没有创建包)作为 venv/bin/python mymodule.py 运行,一切正常。
  • 您使用的是哪个版本的 PyInstallerPyInstaller 安装目录下有hooks/hook-sqlite3.py 文件吗?

标签: python sqlite pyinstaller


【解决方案1】:

请确认您的 PyInstaller 安装目录下有 hooks/hook-sqlite3.py 文件。如果没有,请安装latest PyInstaller version


如果您无法安装最新版本,请使用以下内容创建文件 hook-sqlite3.py

from PyInstaller.hooks.hookutils import collect_submodules
hiddenimports = collect_submodules('sqlite3')

在构建时,提供您放置挂钩文件的目录的路径作为--additional-hooks-dir 参数的值,如下所示:

--additional-hooks-dir=<path_to_directory_of_hook_file>

根据下面的评论,似乎在构建时添加--hidden-import=sqlite3 也可以。

【讨论】:

  • 在构建时添加 --hidden-import=sqlite3 也可以!
  • 对于 pyinstaller 3,您必须使用以下代码导入 collect_submodulesfrom PyInstaller.utils.hooks import collect_submodulesPyInstaller Documentation
【解决方案2】:

无论您在哪里部署模块,都需要先安装 sqlite3 模块。 很可能在您的本地环境中,该模块在通用 python 库中可用。尝试使用 virtualenv 来避免此类问题,您可以使用 pip 安装所有模块的要求。

Sqlite 应该包含在您的 Python 安装中,但这完全取决于源代码、版本或 Python 的安装方式。更多详情请看这里:How can I install sqlite3 to Python?

【讨论】:

  • 感谢您的回复!但是,当我打包 python 包时,不应该捆绑所有必需的模块。因为在使用 pyinstaller 创建包后,我可以在不安装 python 库的情况下运行 python 模块。即使创建数据库表也可以正常工作。只有当我尝试使用 iterdump 模块时,才会出现上述错误。
  • 如果你在同一台本地机器上部署你的包,我希望使用相同的库,无论你在哪里部署都可能会丢失。我可能弄错了。你在使用虚拟环境吗?它使所有这些工作变得更加容易。另外,您使用的是哪个版本的 Python?
  • 我使用的是 python 2.7.1。并且不使用虚拟环境。实际上我也尝试将它部署在同一台机器上。但错误仍然存​​在。当我重新运行我的模块/应用程序时,是否有任何替代方法可以保存数据库状态并恢复它
  • 我的感觉是问题不在于该功能。您可以在您的问题中添加更多代码吗?
  • 我已经使用用于导出和导入数据库的模块编辑了我的问题。如果我直接在我的机器上运行(不使用 pyinstaller 创建包)它工作正常。并且在使用 pyinstaller 创建包后不起作用。
猜你喜欢
  • 2016-02-02
  • 2020-03-13
  • 2012-04-22
  • 2010-09-23
  • 1970-01-01
  • 2017-11-20
  • 2021-06-29
  • 2010-09-09
  • 1970-01-01
相关资源
最近更新 更多