Я взял пример кода python для MySQL пула соединений и попытался выполнить его с django framework. Я могу выполнить запросы и получить данные, если я не закрываю курсор и объект соединения. Когда я вызываю объект соединения функции close (), происходит сбой со следующей ошибкой. Пожалуйста, помогите мне решить эту проблему.
ProgrammingError at / settings 1045 (28000): доступ запрещен для пользователя 'root '@' localhost '(используя пароль: НЕТ)
Метод: GET
URL запроса: http://sample.app.com/settings
Django Версия: 1.11.5
Тип исключения: ProgrammingError
Значение исключения: 1045 (28000): доступ запрещен для пользователя 'root' @ 'localhost' (используется пароль: NO)
Местоположение исключения: venv / local / lib / python2 .7 / site-packages / mysql / connector / connection.py в _auth_switch_request, строка 256 Python Исполняемый файл: venv / bin / python2
Python Версия: 2.7.17
Код, который я использую, выделение жирным шрифтом создает проблему. Если не закрыть соединение, он работает нормально. при закрытии он не работает и выдает ошибку.
db_pool.py
import mysql.connector.pooling
dbconfig = {
"host":"127.0.0.1",
"port":"3306",
"user":"root",
"password":"root",
"database":"test",
}
class MySQLPool(object):
"""
create a pool when connect mysql.
"""
def __init__(self, host="127.0.0.1", port="3306", user="root",
password="root", database="test", pool_name="mypool",
pool_size=3):
res = {}
self._host = host
self._port = port
self._user = user
self._password = password
self._database = database
res["host"] = self._host
res["port"] = self._port
res["user"] = self._user
res["password"] = self._password
res["database"] = self._database
self.dbconfig = res
self.pool = self.create_pool(pool_name=pool_name, pool_size=pool_size)
def create_pool(self, pool_name="mypool", pool_size=3):
"""
Create a connection pool
"""
pool = mysql.connector.pooling.MySQLConnectionPool(
pool_name=pool_name,
pool_size=pool_size,
pool_reset_session=True,
**self.dbconfig)
return pool
> > def close(self, conn, cursor):
> > """ Here I'm facing issue, close is causing the issue. this close must release the connection object and add it to the connection pool. """
> > cursor.close()
> > conn.close()
def execute(self, sql, args=None, commit=False):
"""
Execute a sql
"""
# get connection form connection pool.
conn = self.pool.get_connection()
cursor = conn.cursor()
if args:
cursor.execute(sql, args)
else:
cursor.execute(sql)
if commit is True:
conn.commit()
self.close(conn, cursor)
return None
else:
res = cursor.fetchall()
self.close(conn, cursor)
return res
Использование приведенного выше кода в другом файле db_operation.py
from db_pool import MySQLPool
def testing(request, bid, *args, **kwargs):
mysql_pool = MySQLPool()
query = "select * from test.table1;"
result = mysql_pool.execute(query)
print 'RESULT : ', result
Пожалуйста, помогите мне решить эту проблему или поделитесь лучшими примерами правильного использования пула соединений. Заранее спасибо.