小编bub*_*ain的帖子

关于配置 SQLite 数据库的 URI 路径的困惑

嗨,我正在使用 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 个斜杠作为绝对路径时,它起作用了。

所以我真的很困惑。谁能为我解释为什么?我真的很感激。谢谢

python sqlite uri relative-path absolute-path

12
推荐指数
1
解决办法
1万
查看次数

在 Windows 中为 Flask 应用程序导出环境变量

我正在关注一个 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 文件,我可以在其中存储我的环境变量,但它什么也没做,我在我的目录中没有看到任何 …

python factory environment-variables flask

3
推荐指数
1
解决办法
6073
查看次数