#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