首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >关于配置SQLite数据库的URI路径的混淆

关于配置SQLite数据库的URI路径的混淆
EN

Stack Overflow用户
提问于 2019-06-02 23:30:22
回答 1查看 14.1K关注 0票数 13

嗨,我正在使用Flask和Sqlite3构建一个web应用程序。我在连接数据库时遇到了一段时间的问题,当我写下这段代码时,它无法工作:

代码语言:javascript
复制
#version 1
app.config['SQLALCHEMY_DATABASE_URI'] =
'sqlite:////C:/Users/Giang/PyCharmProjects/FlaskWebBlog/FlaskWebBlog/site.db'

Python给了我操作错误:无法打开数据库,因为我在冒号后面写了4个斜杠。在阅读了sqlalchemy文档并做了这么多试验后,我发现这是有效的:

代码语言:javascript
复制
#with 3 slashes, version 2
app.config['SQLALCHEMY_DATABASE_URI'] = 

 'sqlite:///C:/Users/Giang/PyCharmProjects/FlaskWebBlog/FlaskWebBlog/site.db'

或者使用4个斜杠,但没有C:

代码语言:javascript
复制
#version 3
app.config['SQLALCHEMY_DATABASE_URI'] = 

'sqlite:////Users/Giang/PyCharmProjects/FlaskWebBlog/FlaskWebBlog/site.db'

我之所以感到困惑,是因为基于连接字符串的文档: SQLite数据库的文件规范被视为URL的“数据库”部分。请注意,SQLAlchemy url的格式为:

代码语言:javascript
复制
driver://user:pass@host/database

这意味着要使用的实际文件名从第三个斜杠右侧的字符开始。因此,连接到相对文件路径如下所示:

代码语言:javascript
复制
# relative path
e = create_engine('sqlite:///path/to/database.db')

绝对路径(以斜杠开头)意味着您需要四个斜杠:

代码语言:javascript
复制
# absolute path
e = create_engine('sqlite:////path/to/database.db')

所以根据这个,如果我使用绝对路径,我需要4个斜杠,但是当我在版本1中这样做时,python给了我错误。当我在版本2中使用3个斜杠作为绝对路径时,它起作用了。

所以我真的很困惑。有人能给我解释一下原因吗?我真的很感激。谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-02-18 22:44:10

如果您将SQLite3指向当前工作目录以外的位置,我建议您执行以下操作,以避免出现无法找到数据库的问题:

代码语言:javascript
复制
import os
study_and_database_name = "something_unique"
rdb_string_url = "sqlite:///" + os.path.join(dir, (study_and_database_name + ".db"))
rdb_raw_bytes_url = r'{}'.format(rdb_string_url)

当恢复存储在RDB storage中的Optuna study时,它对我起作用

代码语言:javascript
复制
storage_instance = optuna.storages.RDBStorage(url=rdb_raw_bytes_url)
study_instance = optuna.create_study(
    study_name=study_and_database_name,
    storage=storage_instance,
    load_if_exists=True,
)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56416437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档