#sqlalchemy #fastapi #feature-engineering
Вопрос:
У меня есть простая конечная точка FastApi, которая подключается к базе данных MySQL с помощью SQLAlchemy (на основе руководства: https://fastapi.tiangolo.com/tutorial/sql-databases/)
Я создаю сеанс, используя:
engine = create_engine(
SQLALCHEMY_DATABASE_URL
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Я создаю зависимость:
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
В моем маршруте я хочу выполнить произвольную инструкцию SQL, но я не уверен, как правильно обрабатывать сеанс, соединение, курсор и т. Д. (Включая закрытие), Что, как я понял на собственном опыте, очень важно для правильной производительности
@app.get("/get_data")
def get_data(db: Session = Depends(get_db)):
???
В конечном счете причина этого заключается в том, что моя таблица содержит функции машинного обучения со столбцами, которые заранее не определены. Если есть способ определить базовую модель со «всеми столбцами», это тоже сработало бы, но я тоже не смог ее найти.
Ответ №1:
Я решил эту проблему, используя https://www.encode.io/databases вместо этого/ пакет. Он обрабатывает все соединения / сеансы и т. Д. Под капотом. Упрощенный фрагмент:
database = databases.Database(DATABASE_URL)
@app.get("/read_db")
async def read_db():
data = await database.fetch_all("SELECT * FROM USER_TABLE")
return data
Ответ №2:
import pymysql, pandas as pd
engine = create_engine('mysql pymysql://' uname ':' password '@' server ':' port '/' db)
con = engine.connect()
df = pd.read_sql('SELECT schema_name FROM information_schema.schemata', con)
return df