Pandas read_sql с использованием Django.db.connection
Существует ли рекомендуемый способ использования pandas read_sql из приложения Django? Я использовал гораздо более старую версию pandas, и это работало:
import django.db.connection
import pandas as pd
df = pd.read_sql("select employee.name from employee;", con=connection)
Теперь я получаю эту ошибку от read_sql:
UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.
Запрос, кажется, работает даже с этим предупреждением, но я не хочу рисковать, что он может сломаться. Я использовал Django.db.connection, чтобы pandas использовал пул соединений с БД в Django. Я могу успешно использовать строку соединения с методом read_sql, но я не хочу, чтобы pandas открывал кучу соединений в многопользовательской системе. То же самое с SQLAlchemy - я не хочу добавлять еще один пул соединений в приложение. Есть какие-нибудь советы или обходные пути? Я не нашел ничего в документации по pandas или Django об этом.
Django==3.2
pandas==2.2.1
mysqlclient==2.2.4
MySQL version 8
Предполагая, что вы используете MySQL, ваши настройки Django должны быть примерно такими:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'mypass',
'HOST': 'localhost',
'PORT': '3306',
}
}
Вы можете использовать эти настройки для создания движка SQLAlchemy, который будете использовать.
from django.conf import settings
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine(
"mysql://{user}:{password}@{host}:{port}/{name}".format(
user=settings.DATABASES["default"]["USER"],
password=settings.DATABASES["default"]["PASSWORD"],
host=settings.DATABASES["default"]["HOST"],
port=settings.DATABASES["default"]["PORT"],
name=settings.DATABASES["default"]["NAME"],
)
)
df = pd.read_sql("SELECT employee.name FROM employee", con=engine)
Удачи!