【问题标题】:Python Sqlite3 Get Sqlite Connection pathPython Sqlite3 获取 Sqlite 连接路径
【发布时间】:2019-06-20 23:59:59
【问题描述】:

给定一个 sqlite3 连接对象,如何检索到 sqlite3 文件的文件路径?

【问题讨论】:

    标签: python sqlite


    【解决方案1】:

    Python connection object 不存储此信息。

    您可以在打开连接之前存储路径:

    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
    

    如果您使用了connection 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])
      

      第三个参数(row[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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-20
        • 2020-05-18
        • 2019-06-14
        • 1970-01-01
        • 2021-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多