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

时间:2014-08-12 17:44:12

标签: 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)

由于

1 个答案:

答案 0 :(得分:2)

您实际上已将数据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)