Python Sqlite3 Get Sqlite Connection path

Referencing Martijn Pieters, except hardcoding is a must, you should do this:

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

conn = sqlite3.connect(db)

We can use the PRAGMA database_list command.

cur = con.cursor()
cur.execute("PRAGMA database_list")
rows = cur.fetchall()

for row in rows:
    print(row[0], row[1], row[2])

The third parameter (row[2]) is the file name of the database. Note that there could be more databases attached to SQLite engine.

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

The above is a sample output of a script that contains the Python code.


The Python connection object doesn't store this information.

You could store the path before you open the connection:

path = '/path/to/database/file.db'
conn = sqlite3.connect(path)

or you can ask the database itself what connections it has, using the database_list pragma:

for id_, name, filename in conn.execute('PRAGMA database_list'):
    if name == 'main' and filename is not None:
        path = filename
        break

If you used a connection URI (connecting with the sqlite3.connect() parameter uri=True), the filename will not include the URI parameters or the file:// prefix.

Tags:

Python

Sqlite