在Python环境中加载SQLite数据库
在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这个文件。我尝试了一个在这里找到的解决方案的变种(如何在源代码中使用package_data中的数据?),现在可以确认数据已经加载了,但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 个回答
3
你实际上是把 data(也就是 data.db
的内容)传给了 sqlite3.connect()
。不过,这个函数其实是需要你提供一个数据库的路径,比如 /data/data.db
。
这个函数会返回一个二进制字符串,内容是指定资源的内容。
你可以使用 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)