我正在尝试将烧瓶应用程序连接到本地MySQL数据库进行测试。我已经创建了一个flask对象和一个类,以表示成功连接后要创建的示例表。
这些是我的项目的本地环境变量:
#.env
LOCAL_MYSQL_URL = mysql://Username:somePassword@127.0.0.1:3306/database_name
SECRET_KEY = 'someverylongstring'
这是我的project_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)
class User(db.Model):
__tablename__ = 'example'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __init__(self, username, email):
self.username = username
self.email = email
def __repr__(self):
return '<User %r>' % self.username
db.create_all()
db.session.commit()
admin = User('admin', 'admin@example.com')
guest = User('guest', 'guest@example.com')
db.session.add(admin)
db.session.add(guest)
db.session.commit()
users = User.query.all()
print(users)
最后这是我的切入点:
#run.py
from project_name import app
if __name__ == '__main__':
app.run(debug=True)
但是,在SQLAlchemy库中经过长时间的堆栈跟踪之后,出现以下错误:
if sa_url.drivername.startswith('mysql'):
AttributeError: 'NoneType' object has no attribute 'drivername'
我正在尝试通过以下关于stackoverlow的教程和答案来完成这项工作,以解决类似的问题,但是到目前为止,它们都没有帮助我。
我在这里想念什么?我的mysql驱动程序名称怎么了?
答案 0 :(得分:1)
确保pip install pymysql
之后的SQLAlchemy URI类似于此格式
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://{DB_USERNAME}:{DB_PASSWORD}@localhost:3306/{DB_NAME}'
答案 1 :(得分:0)
如果你曾经在你的models.py中使用过“db.Model.metadata.reflect(db.engine)”,你仍然会得到同样的错误信息。 因此,按照@MattSom 的建议将驱动程序名称 mysqldb 更改为 pymysql 并注释或删除 这个指令“db.Model.metadata.reflect(db.engine)”