簡體   English   中英

無法從在Heroku上運行的Flask應用程序連接到cleardb

[英]Cannot connect to cleardb from flask app running on heroku

我正在學習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()

從錯誤中可以看到: 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM