【发布时间】:2019-10-19 23:13:57
【问题描述】:
我正在尝试将我的烧瓶应用程序连接到我的本地 MySQL 数据库进行测试。我已经制作了一个烧瓶对象和一个类来表示一个要在成功连接后创建的示例表。
这些是我的项目的本地环境变量:
#.env
LOCAL_MYSQL_URL = mysql://Username:somePassword@127.0.0.1:3306/database_name
这是我的项目名称__init__ 文件:
#__init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
ON_HEROKU = 'ON_HEROKU' in os.environ
if ON_HEROKU:
DB_URL = os.environ.get('CLEARDB_DATABASE_URL')
else:
DB_URL = os.environ.get('LOCAL_MYSQL_URL')
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY')
db = SQLAlchemy(app)
db.create_all()
db.session.commit()
但是运行应用程序后出现以下错误:
if sa_url.drivername.startswith('mysql'):
AttributeError: 'NoneType' object has no attribute 'drivername'
我正在尝试按照在 stackoverlow 上为类似问题提供的教程和答案来完成这项工作,但到目前为止,它们都没有帮助我。
我在这里缺少什么?我的 mysql 驱动名称有什么问题?
【问题讨论】:
-
如果您将这一行更改为
KeyError是否会引发DB_URL = os.environ.get('LOCAL_MYSQL_URL')到os.environ['LOCAL_MYSQL_URL']? -
@SuperShoot 是的。我已经按照你的方式尝试过了,我得到了:
raise KeyError(key) from None KeyError: 'MYSQL_URL' -
"我的mysql驱动名有什么问题?":
'NoneType' object has no attribute 'drivername'表示sa_url是None,驱动名没有问题,只是你传递给flask的url- sqlalchemy 是None和None.drivername不存在。 -
我不得不使用 pymysql 来让它工作。
pip install pymysql -
@MattSom 与您的评论直接冲突,您说在没有
.get()的情况下访问 env var 时出现关键错误。我不知道从这里去哪里。
标签: python flask sqlalchemy flask-sqlalchemy