嗨,我正在使用 Flask 和 Sqlite3 构建一个 Web 应用程序。有一段时间我在连接数据库时遇到问题,但在我写这个时它不起作用:
#version 1
app.config['SQLALCHEMY_DATABASE_URI'] =
'sqlite:////C:/Users/Giang/PyCharmProjects/FlaskWebBlog/FlaskWebBlog/site.db'
Run Code Online (Sandbox Code Playgroud)
Python给了我操作错误:无法打开数据库,因为我在冒号后写了4个斜线。在阅读了 sqlalchemy 文档并进行了多次试验后,我发现这有效:
#with 3 slashes, version 2
app.config['SQLALCHEMY_DATABASE_URI'] =
'sqlite:///C:/Users/Giang/PyCharmProjects/FlaskWebBlog/FlaskWebBlog/site.db'
Run Code Online (Sandbox Code Playgroud)
或者这个有 4 个斜线但没有 C:
#version 3
app.config['SQLALCHEMY_DATABASE_URI'] =
'sqlite:////Users/Giang/PyCharmProjects/FlaskWebBlog/FlaskWebBlog/site.db'
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为基于连接字符串的文档:SQLite 数据库的文件规范被视为 URL 的“数据库”部分。请注意,SQLAlchemy 网址的格式为:
driver://user:pass@host/database
Run Code Online (Sandbox Code Playgroud)
这意味着要使用的实际文件名以第三个斜杠右侧的字符开头。所以连接到相对文件路径看起来像:
# relative path
e = create_engine('sqlite:///path/to/database.db')
Run Code Online (Sandbox Code Playgroud)
以斜杠开头的绝对路径意味着您需要四个斜杠:
# absolute path
e = create_engine('sqlite:////path/to/database.db')
Run Code Online (Sandbox Code Playgroud)
所以根据this,如果我使用绝对路径,我需要4个斜杠,但是当我用版本1这样做时,python给了我错误。当我在版本 2 中使用 3 个斜杠作为绝对路径时,它起作用了。
所以我真的很困惑。谁能为我解释为什么?我真的很感激。谢谢
我正在关注一个 Youtube 教程全功能 Web 应用程序,但我遇到了应用程序工厂的问题。根据我的理解,我需要将SECRET_KEY和SQLALCHEMY_DATABASE_URI等敏感信息放入环境变量中。在视频中,创建者在 Mac 上工作,他打开了他的 .bash_profile 文件并添加了这些行(我将实际值留空):
export SECRET_KEY='....'
export SQLALCHEMY_DATABASE_URI='......'
Run Code Online (Sandbox Code Playgroud)
我正在使用 Windows,但在我的计算机中找不到 .bash_profile 文件,所以我转到控制面板并设置新的环境变量 SECRET_KEY 和 SQLALCHEMY_DATABASE_URI。然后我按照视频中的步骤在 config.py 中创建此类 Config
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY')
SQLALCHEMY_DATABASE_URI = os.environ.get('SQLALCHEMY_DATABASE_URI')
MAIL_SERVER = 'smtp.gmail.com'
MAIL_PORT = 587
MAIL_USE_TLS = True
MAIL_USERNAME = os.environ.get('EMAIL_USER')
MAIL_PASSWORD = os.environ.get('EMAIL_PASSWORD')
Run Code Online (Sandbox Code Playgroud)
然后我运行了我的应用程序,但是出现了一条错误消息“使用CSRF需要一个秘密密钥。”,所以我认为我的flask应用程序无法获取我设置的SECRET_KEY或其他环境变量。在我的init .py 中有这些配置之前,应用程序运行良好,但现在当我将这些配置移动到 config.py 中的对象内部时,它停止工作。
根据我的理解,export是一个创建环境变量的命令,所以我认为在 .bash_profile 文件中导出这些变量等于设置环境变量。
为了解决我的问题,我尝试按照教程(https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xv-a-better-application-structure)创建 .env 文件。在命令提示符下,我跑了
pip install python-dotenv
Run Code Online (Sandbox Code Playgroud)
在 Config.py 中,我添加了
from dotenv import load_dotenv
basedir = os.path.abspath(os.path.dirname(__file__))
load_dotenv(os.path.join(basedir, '.env'))
Run Code Online (Sandbox Code Playgroud)
我认为这会创建一个 .env 文件,我可以在其中存储我的环境变量,但它什么也没做,我在我的目录中没有看到任何 …