在Python环境中加载SQLite数据库

2 投票
1 回答
766 浏览
提问于 2025-04-18 17:02

在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

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

撰写回答