【问题标题】:how to set SQLALCHEMY_DATABASE_URI?如何设置 SQLALCHEMY_DATABASE_URI?
【发布时间】:2020-10-15 12:07:26
【问题描述】:

我在前端有一个简单的反应应用程序,由后端的烧瓶提供服务。我还打开了我的 MySQLWorkbench; db 正在运行,我可以直接在 mysqlworkbench 中对其进行修改。

在 main.py 中,我必须设置 SQLAlchemy 变量,但我收到以下错误:

File "main.py", line 10, in <module>

app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://"+ os.environ['Administrator'] + ":" + os.environ['Photon959']+ "@" + os.environ['pcadata.<>.rds.amazonaws.com'] + ":3306/innodb"
File "/Users/<>/miniconda3/lib/python3.7/os.py", line 679, in __getitem__
raise KeyError(key) from None
KeyError: 'Administrator'

这是我的 main.py,我应该在其中设置 SQLAlchemy 变量。

from flask import (Flask, request, render_template)
from flask_mysqldb import MySQL
from flask_sqlalchemy import SQLAlchemy
import os

app = Flask("__main__")

mysql = SQLAlchemy(app)

app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://"+ 
os.environ['Administrator'] + ":" + os.environ[<>]+ 
"@" + os.environ['<>.rds.amazonaws.com'] + 
":3306/innodb"

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == "POST":
        details = request.form
        firstName = details['fname']
        lastName = details['lname']
        cur = mysql.connection.cursor()
        cur.execute("INSERT INTO MyUsers(firstName, lastName) VALUES (%s, %s)", (firstName, lastName))
        db.connection.commit()
        cur.close()
        return 'success'
    return render_template('index.html')

app.run(debug=True)

在那个 main.py 中,我将 db 用户设置为管理员(我在 aws 上登录的内容)。但是这个错误即将出现,所以我不太确定从这里去哪里。任何帮助表示赞赏!

【问题讨论】:

  • 看起来Administrator 环境变量没有设置。你是怎么设置的?
  • 我认为我没有设置它;我该怎么做?

标签: python flask environment-variables


【解决方案1】:

没有设置“管理员”环境变量,所以访问os.environ['Administrator']时会得到KeyError

os.environ 提供了一个字典式的接口来访问环境变量。环境变量是在程序之外设置的键/值对。要从 os.environ 获取环境变量的值,请使用其名称,例如:

db_name = os.environ["DB_NAME"]

在问题的代码中,看起来好像代码使用了预期的作为环境变量名称,例如:

os.environ['<>.rds.amazonaws.com']

而不是

os.environ['DB_HOST']

如果此应用的代码不会被共享并且配置不会改变,那么现在对细节进行硬编码可能是最简单的:

app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://Administrator:<>@<>.rds.amazonaws.com3306/innodb"

要从环境中获取数据库配置,代码如下所示:

app.config['SQLALCHEMY_DATABASE_URI'] = ("mysql+pymysql://"+ os.environ['DB_USER'] + ":" 
                                         + os.environ['DB_PASSWORD']+ "@" 
                                         + os.environ['DB_HOST'] 
                                         + ":3306/innodb")

并且您可以在调用您的应用之前在终端中设置环境变量:

export FLASK_APP=my_app_name
export DB_USER=Administrator
export DB_PASSWORD=password
export DB_HOST=foo.rds.amazonaws.com
flask run

【讨论】:

    猜你喜欢
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-07
    • 2022-10-24
    • 2021-02-26
    • 2022-12-09
    • 2020-02-21
    • 1970-01-01
    相关资源
    最近更新 更多