给定一个 sqlite3 连接对象,如何检索到 sqlite3 文件的文件路径?
问问题
25197 次
3 回答
23
我们可以使用 PRAGMA database_list 命令。
cur = con.cursor()
cur.execute("PRAGMA database_list")
rows = cur.fetchall()
for row in rows:
print(row[0], row[1], row[2])
第三个参数(row[2])是数据库的文件名。请注意,可能有更多数据库附加到 SQLite 引擎。
$ ./list_dbs.py
0 main /home/user/dbs/test.db
2 movies /home/user/dbs/movies.db
以上是包含 Python 代码的脚本的示例输出。
于 2013-01-24T16:22:32.107 回答
22
Python 连接对象不存储此信息。
您可以在打开连接之前存储路径:
path = '/path/to/database/file.db'
conn = sqlite3.connect(path)
database_list
或者您可以使用pragma询问数据库本身它有哪些连接:
for id_, name, filename in conn.execute('PRAGMA database_list'):
if name == 'main' and filename is not None:
path = filename
break
如果您使用连接 URI(使用sqlite3.connect()
参数连接uri=True
),则文件名将不包含 URI 参数或file://
前缀。
于 2012-12-17T11:03:50.720 回答
5
参考 Martijn Pieters,除了硬编码是必须的,你应该这样做:
path = os.path.dirname(os.path.abspath(__file__))
db = os.path.join(path, 'file.db')
conn = sqlite3.connect(db)
于 2019-06-20T15:59:59.887 回答