我正在使用 flask_mysqldb ( https://github.com/alexferl/flask-mysqldb/blob/master/flask_mysqldb/__init__.py ) 從應用引擎連接到云 sql。
我將以下引數傳遞給它:
MYSQL_HOST = "PUBLIC IP of the cloud sql instance"
MYSQL_UNIX_SOCKET = '/cloudsql/<project_id>:<region>:<instance name>'
MYSQL_USER = 'user'
MYSQL_PASSWORD = 'pword'
但我在嘗試從應用引擎連接時收到一條錯誤訊息:
MySQLdb._exceptions.OperationalError: (2003, "Can't connect to MySQL server on 'PUBLIC_IP_ADDRESS' (110)")
當我允許到云 sql 實體的所有連接(即允許 0.0.0.0/0 作為允許的網路)時,應用引擎成功并且能夠連接。
應用引擎實體與云sql實體在同一個專案中,應用引擎服務賬號有權限。
任何想法是什么問題?謝謝
uj5u.com熱心網友回復:
此錯誤是由于您在示例中MYSQL_HOST同時設定的事實引起的。MYSQL_UNIX_SOCKET設定MYSQL_HOST告訴flask-mysqldb通過 TCP 連接進行連接,而設定MYSQL_UNIX_SOCKET告訴它通過 Unix 套接字連接。這些是相互沖突的,因此會導致您看到的錯誤。
不要設定MYSQL_HOST,從您的代碼中洗掉它,一切都應該正常作業:
from flask import Flask
from flask_mysqldb import MySQL
app = Flask(__name__)
# Required
app.config["MYSQL_USER"] = <YOUR_DB_USER>
app.config["MYSQL_PASSWORD"] = <YOUR_DB_PASSWORD>
app.config["MYSQL_DB"] = <YOUR_DB_NAME>
app.config["MYSQL_UNIX_SOCKET"] = '/cloudsql/<PROJECT_ID>:<REGION>:<INSTANCE_NAME>'
# Extra configs, optional:
app.config["MYSQL_CURSORCLASS"] = "DictCursor"
mysql = MySQL(app)
@app.route("/")
def users():
cur = mysql.connection.cursor()
cur.execute("""SELECT user, host FROM mysql.user""")
rv = cur.fetchall()
return str(rv)
if __name__ == "__main__":
app.run(debug=True)
通過上述更改,您不再需要允許 0.0.0.0/0 作為允許的網路。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/472118.html
