首页 > 解决方案 > Mysql 与 Flask python 3.7 的连接出现了一些问题

问题描述

环境:

在我的本地计算机上:Python 3.7.7 Flask 1.1.2 Werkzeug 1.0.1

远程服务器:Ubuntu MariaDB 10.1.44

问题:

我正在本地计算机上使用 Flask 开发一个 Web 应用程序,它需要访问我的远程 Mysql 服务器。我在浏览器上收到此错误消息:

MySQLdb._exceptions.OperationalError
MySQLdb._exceptions.OperationalError: (1045, "Access denied for user 'Nino'@'lneuilly-657-1-15-173.w193-248.abo.wanadoo.fr' (using password: YES)")

我尝试了什么:

我在我的 Plesk 仪表板中启用了对 Mysql 服务器的远程访问。我为我的 Mysql 用户授予了完全权限。我在一个成功的 python 文件上使用正常的 MySQL 连接进行了测试。请参阅下面我尝试的代码:

try:    
    import mysql.connector
    mydb = mysql.connector.connect(
                        host="217.1.1.1",
                        port=3306,
                        user="John",
                        passwd="123456",
                        database="wp_fi1lb"
                    )

    mycursor = mydb.cursor()
    print("Mysql connection 1 succesfull")
except ValueError:
    print("Error mysql connection 1")


from flask import Flask, render_template, url_for, flash, redirect
from flask_mysqldb import MySQL
app = Flask(__name__)

try:
    app.config['SECRET_KEY']='secret'
    app.config['MYSQL_HOST']='217.1.1.1'
    app.config['MYSQL_USERNAME']='John'
    app.config['MYSQL_PASSWORD']='123456'
    app.config['MYSQL_DB']='wp_fi1lb'
    app.config['MYSQL_CURSORCLASS']='DictCursor'

    mysql = MySQL(app)
    cursor=mysql.connection.cursor()
    print("Mysql connection 2 succesfull")
except ValueError:
    print("Error mysql connection 2")

并查看输出:

Mysql connection 1 succesful
Traceback (most recent call last):
  File "c:/wamp64/www/dashboard/test.py", line 30, in <module>
    cursor=mysql.connection.cursor()
AttributeError: 'NoneType' object has no attribute 'cursor'

您可以看到连接到 MySQL 数据库的第一种方式是成功的,而第二种方式则失败了。

所以我在谷歌搜索后尝试了另一种方法。这次我使用了flask-mysql而不是flask-mysqldb:

try:    
    import mysql.connector
    mydb = mysql.connector.connect(
                        host="217.1.1.1",
                        port=3306,
                        user="John",
                        passwd="123456",
                        database="wp_fi1lb"
                    )

    mycursor = mydb.cursor()
    print("Mysql connection 1 succesfull")
except ValueError:
    print("Error mysql connection 1")


from flask import Flask, render_template, url_for, flash, redirect
#from flask_mysqldb import MySQL
from flaskext.mysql import MySQL
app = Flask(__name__)

try:
    app.config['SECRET_KEY']='secret'
    app.config['MYSQL_DATABASE_HOST']='217.1.1.1'
    app.config['MYSQL_DATABASE_PORT']='3306'
    app.config['MYSQL_DATABASE_USERNAME']='John'
    app.config['MYSQL_DATABASE_PASSWORD']='123456'
    app.config['MYSQL_DATABASE_DB']='wp_fi1lb'
    app.config['MYSQL_DATABASE_CURSORCLASS']='DictCursor'

    mysql = MySQL(app)
    #cursor=mysql.connection.cursor()
    cursor = mysql.get_db().cursor()
    print("Mysql connection 2 succesfull")
except ValueError:
    print("Error mysql connection 2")

输出:

Mysql connection 1 succesfull
Traceback (most recent call last):
  File "c:/wamp64/www/dashboard/test.py", line 33, in <module>
    cursor = mysql.get_db().cursor()
AttributeError: 'NoneType' object has no attribute 'cursor'

如您所见,我们有完全相同的问题。

我不明白我做错了什么?如果可以连接 mysql.connector,为什么要使用 flask-mysqldb?

标签: mysqlpython-3.xflask

解决方案


推荐阅读