Python Sqlite3 Get Sqlite Connection path

后端 未结 3 802
囚心锁ツ
囚心锁ツ 2021-02-18 17:59

Given an sqlite3 connection object, how can retrieve the file path to the sqlite3 file?

相关标签:
3条回答
  • 2021-02-18 18:30

    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.

    0 讨论(0)
  • 2021-02-18 18:36

    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.

    0 讨论(0)
  • 2021-02-18 18:39

    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)
    
    0 讨论(0)
提交回复
热议问题