【问题标题】:Loading sqlite database in python distribution在 python 发行版中加载 sqlite 数据库
【发布时间】:2014-10-05 21:46:15
【问题描述】:

在 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)

谢谢

【问题讨论】:

    标签: python build setuptools distribute


    【解决方案1】:

    您实际上是在将数据data.db 的内容)传递给sqlite3.connect()。但是,它需要一条通往您的数据库的路径,例如 /data/data.db

    pkgutil.get_data():

    该函数返回一个二进制字符串,该字符串是 指定资源。

    您可以改为使用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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-26
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 2018-06-21
      相关资源
      最近更新 更多