如何使用SQLAlchemy在Heroku上使用Flask应用程序连接到MySQL

时间:2019-10-21 14:32:47

标签: heroku flask flask-sqlalchemy mysql-python cleardb

在本地计算机上,使用本地MySQL数据库,一切正常。这是我的应用__init__.py文件:

#rootfolder/__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:
    from dotenv import load_dotenv
    load_dotenv()
    DB_URL = os.getenv('MYSQL_URL')

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

from projectname.Controller.root import root
from projectname.Controller.user_controller import user_routes # This imports Model too

app.register_blueprint(root)
app.register_blueprint(user_routes)

db.create_all()

user_routes蓝图也导入Model类。我在本地数据库中看到了创建的表,因此逻辑看起来还不错。

'HELLO'条件内打印出DB_URLif ON_HEROKU:,以检查云中的网址:

if ON_HEROKU:
  DB_URL = os.environ.get('CLEARDB_DATABASE_URL')
  print('HELLO')
  print(DB_URL)

我可以看到他们正在查看heroku日志:

.
.
app[web.1]: HELLO
app[web.1]: mysql://*********:*******@us-cdbr-iron-east-05.cleardb.net/heroku_c52490fb3111cda?reconnect=true
.
.

实际上,我在heroku上安装了ClearDB,该URL作为配置变量:

enter image description here

我还设法使用HeidiSQL连接到了这个heroku数据库,heroku的URL创建了我。所以一切都必须准备就绪。

注释了db.create_all()函数,已部署的heroku应用程序未引发任何错误,我在根路由后看到基本json消息。但是,再加上db.create_all()会出现以下日志错误:

app[web.1]:     db.create_all()
app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 1033, in create_all
  .
  .
  .
app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/sqlalchemy/dialects/mysql/mysqldb.py", line 118, in dbapi
app[web.1]:     return __import__("MySQLdb")
app[web.1]: ModuleNotFoundError: No module named 'MySQLdb'

我在本地也遇到了类似的错误,因此我尝试用mysql+pymysql://驱动程序名修改heroku给我的URL并将PyMySQL==0.9.3添加到我的requirements.txt(我不确定heroku是否检查)。

enter image description here

现在的错误还不够:

app[web.1]:     db.create_all()
app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 1033, in create_all
  .
  .
  .
app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/pymysql/__init__.py", line 94, in Connect
app[web.1]:     return Connection(*args, **kwargs)
app[web.1]: TypeError: __init__() got an unexpected keyword argument 'reconnect'

我的Procfile如下所示:web gunicorn run:app,因为run.py启动了整个应用程序。

我在这里想念什么?

0 个答案:

没有答案