Соединение Mysql с Flask python 3.7 вызывает некоторые проблемы

#mysql #python-3.x #flask

#mysql #python-3.x #flask

Вопрос:

Окружающая среда:

На моем локальном компьютере: Python 3.7.7 Flask 1.1.2 Werkzeug 1.0.1

Удаленный сервер: Ubuntu MariaDB 10.1.44

Проблема:

Я разрабатываю веб-приложение с помощью Flask на своем локальном компьютере, которому необходим доступ к моему удаленному серверу 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)")
  

Что я пробовал:

Я включаю удаленный доступ на своем сервере Mysql в своей панели управления Plesk. Я дал полные разрешения моему пользователю Mysql. Я провел тест с обычным подключением MySQL к файлу python, который прошел успешно. Пожалуйста, посмотрите Ниже код, который я пробовал:

 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 был успешным, тогда как второй способ не удался.

Поэтому я попробовал другой способ после того, как я сделал некоторый поиск в Google. На этот раз я использовал 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'
  

Как вы можете видеть, у нас точно такая же проблема.

Я не понимаю, что я делаю не так? Почему я должен использовать flask-mysqldb, если я могу подключиться с помощью mysql.connector?

Комментарии:

1. просто проверьте, можете ли вы удаленно получить доступ к базе данных или нет с теми же учетными данными или нет, я думаю, что лучше использовать sqlalchemy, поскольку он хорош с mysql db и другими

2. Спасибо за помощь, но мне удалось получить удаленный доступ с теми же учетными данными с помощью mysql.connector (см. Успешное подключение 1 в выходных данных и исходном коде)

3. в случае 2, инициализируйте приложение, как в документации flask-mysql.readthedocs.io/en/latest