25

sqlite3接続オブジェクトが与えられた場合、sqlite3ファイルへのファイルパスを取得するにはどうすればよいですか?

4

3 に答える 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])

3 番目のパラメーター (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または、プラグマを使用して、データベース自体にどの接続があるかを問い合わせることができます。

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 に答える