我正在学习Flask等,并在本地创建了一个简单的应用程序。使用xammp中的本地mysql数据库,一切正常。我将其导出并导入到heroku上的clearDB中,并部署了我的应用程序。该应用程序运行,但是每当我尝试访问依赖于日志中的数据库的页面时,都会看到此错误。
pymysql.err.OperationalError:(2003年,“无法连接到'localhost'上的MySQL服务器([Errno 111]连接被拒绝)”)
我在本地运行了该应用程序,但是使用了clearDB数据库,它能够毫无问题地检索数据。文件中的所有内容均已配置为可根据来自heroku的URL详细信息进行访问。
代码在下面。我确定还有很多其他问题,但是正如我所说的,我正在学习,并且从教程中获得了所有这些内容。
#instaniation
app = Flask(__name__)
app.secret_key= 'secret123'
#config
app.config['MYSQL_HOST'] = 'us-cdbr-iron-east-02.cleardb.net'
app.config['MYSQL_USER'] = 'redacted'
app.config['MYSQL_PASSWORD'] = 'redacted'
app.config['MYSQL_DB'] = 'heroku_0c6326c59d8b6e9'
app.config['MYSQL_CURSORCLASS'] = 'DictCursor' #a cursor is a connection to let us run methods for queries. We set is as a dictionary
#init MySQL
mysql = MySQL(app,cursorclass=DictCursor)
#url endpoint
@app.route('/')
#function for starting app
def index():
#can directly return HTML
return render_template('index.html')
@app.route('/about')
def about():
return render_template('about.html')
#many articles
@app.route('/articles')
def articles():
#create Cursor
cur = mysql.get_db().cursor() #to execute commands
cur.execute("USE myflaskapp")
#get articles
result = cur.execute("SELECT * FROM articles")
#should retrieve all as a dictionary
articles = cur.fetchall()
if result > 0:
return render_template('articles.HTML', articles=articles)
else:
msg= 'No Articles Found'
return render_template('articles.HTML', msg=msg)
cur.close()
答案 0 :(得分:0)
从错误中可以看到:pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")
MySQL试图连接到localhost
服务器,这意味着它没有加载您的配置变量。
如果您正在使用https://flask-mysql.readthedocs.io/en/latest/#中的flask扩展来加载MySQL,那么您可能忘记了初始化应用程序(pip install flask-mysql
)
mysql.init_app(app)
您的代码头现在应该像这样
并注意配置变量名称,扩展名使用略有不同的约定
from flask import Flask
from flaskext.mysql import MySQL
#instaniation
app = Flask(__name__)
app.secret_key= 'secret'
#config
app.config['MYSQL_DATABASE_USER'] = 'user'
app.config['MYSQL_DATABASE_PASSWORD'] = 'password'
app.config['MYSQL_DATABASE_DB'] = 'db'
app.config['MYSQL_DATABASE_HOST'] = 'host'
#init MySQL
mysql = MySQL()
mysql.init_app(app)