【发布时间】:2019-10-18 08:43:57
【问题描述】:
您好,我正在使用 Flask 和 Sqlite3 构建一个 Web 应用程序。我在连接数据库时遇到了一段时间的问题,当我写这个时它没有工作:
#version 1
app.config['SQLALCHEMY_DATABASE_URI'] =
'sqlite:////C:/Users/Giang/PyCharmProjects/FlaskWebBlog/FlaskWebBlog/site.db'
Python 给了我操作错误:无法打开数据库,因为我在冒号后面写了 4 个斜线。在阅读了 sqlalchemy 文档并进行了多次试验后,我发现这很有效:
#with 3 slashes, version 2
app.config['SQLALCHEMY_DATABASE_URI'] =
'sqlite:///C:/Users/Giang/PyCharmProjects/FlaskWebBlog/FlaskWebBlog/site.db'
或者这个有 4 个斜线但没有 C:
#version 3
app.config['SQLALCHEMY_DATABASE_URI'] =
'sqlite:////Users/Giang/PyCharmProjects/FlaskWebBlog/FlaskWebBlog/site.db'
我很困惑,因为基于连接字符串的文档:SQLite 数据库的文件规范被视为 URL 的“数据库”部分。请注意,SQLAlchemy url 的格式是:
driver://user:pass@host/database
这意味着要使用的实际文件名以第三个斜杠右侧的字符开头。所以连接到相对文件路径看起来像:
# relative path
e = create_engine('sqlite:///path/to/database.db')
绝对路径,以斜杠开头表示,需要四个斜杠:
# absolute path
e = create_engine('sqlite:////path/to/database.db')
根据这个,如果我使用绝对路径,我需要 4 个斜杠,但是当我使用版本 1 时,python 给了我错误。当我在版本 2 中使用 3 个斜线作为绝对路径时,它起作用了。
所以我真的很困惑。谁能为我解释为什么?我真的很感激。谢谢
【问题讨论】:
标签: python sqlite uri relative-path absolute-path