Python Sqlite3 Получить Sqlite путь подключения

Учитывая объект соединения sqlite3, как получить путь к файлу sqlite3?

Ответ 1

Объект соединения 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://.

Ответ 2

Мы можем использовать команду 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])

Третий параметр (строка [2]) - это имя файла базы данных. Обратите внимание, что к движку SQLite может быть добавлено больше баз данных.

$ ./list_dbs.py 
0 main /home/user/dbs/test.db
2 movies /home/user/dbs/movies.db

Выше приведен пример вывода скрипта, который содержит код Python.

Ответ 3

Ссылка на Martijn Pieters, за исключением того, что жесткое кодирование является обязательным, вы должны сделать это:

path = os.path.dirname(os.path.abspath(__file__))
db = os.path.join(path, 'file.db')

conn = sqlite3.connect(db)