python - 在Python发行版中加载sqlite数据库

标签 python build setuptools distribute

在 setup.py 中,我已将 package_data 指定为以下内容:

packages=['londontweetgrabber'],
package_dir={'londontweetgrabber': 'londontweetgrabber'},
package_data={'londontweetgrabber': ['data/data.db']},

我的目录层次结构大致如下:

londontweetgrabber/
 |
 | docs/
 | ...
 | londontweetgrabber/
    | 
    | __init__.py
    | authentication.py
    | data
        |
        | data.db
 |
 | README
 | setup.py

我想做的是使用 sqlite3 加载 data.db 中的文件。尝试在这里找到的解决方案的变体( How do I use data in package_data from source code? )我可以验证现在正在加载数据,但是 sqlite 提示一个我知道的表不存在。我希望这个 data.db 文件与我正在编写的 python 包一起分发,因为我依赖它来完成我想做的事情。

我目前用于加载和加载sqlite失败的代码:

import sqlite3
import pkgutil


def get_conn():
    data = pkgutil.get_data('londontweetgrabber', 'data/data.db')
    print data

    return sqlite3.connect(data)

谢谢

最佳答案

您实际上是将数据(data.db的内容)传递给sqlite3.connect() 。然而,它需要一个像 /data/data.db 这样的数据库路径。

参见pkgutil.get_data() :

The function returns a binary string that is the contents of the specified resource.

您可以使用 pkg_resources.resource_filename()为您的 data.db 构建正确的文件系统路径:

import sqlite3
import pkg_resources

db_path = pkg_resouces.resource_filename('londontweetgrabber', 'data/data.db')
conn = sqlite3.connect(db_path)

关于python - 在Python发行版中加载sqlite数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25270817/

相关文章:

python - MultiIndex 数据帧的 Pandas HDFStore : how to efficiently get all indexes

python - 在循环中的同一行上打印多个字符串

第一次启动正在开发的应用程序后,iOS 9.x 设置空白

java - 使用 Maven 覆盖 Java 常量?

python - 停止 setup.py 安装为 egg

python - 在 Linux 上部署 PyQt5 应用程序

python - 如何使用 patch.PathPatch 指定矩形的颜色列表?

python - 在 django 中组织关系的最佳方式是什么?平坦的还是树状的?

java - Jhipster gradle 构建未加载生产配置文件

python - setuptools:使用源文件夹中的 setup.py 从 'project' 导入