嗨,我正在使用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个斜杠作为绝对路径时,它起作用了。
所以我真的很困惑。有人能给我解释一下原因吗?我真的很感激。谢谢
发布于 2021-02-18 22:44:10
如果您将SQLite3指向当前工作目录以外的位置,我建议您执行以下操作,以避免出现无法找到数据库的问题:
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时,它对我起作用
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,
)
https://stackoverflow.com/questions/56416437
复制相似问题