#python #sql-server #sqlalchemy
#python #sql-server #sqlalchemy
Вопрос:
Я пытаюсь ознакомиться с SQLAlchemy, а именно с модулем ORM. Я создал несколько разных классов таблиц; TableClass1
, TableClass2
, TableClass3
, и т.д. Все они имеют уникальный ID
столбец. Я использую базу данных MSSQL.
Я хочу получить максимальное ID
значение для каждой таблицы, поэтому я продолжаю и делаю следующее:
query1 = db.query(TableClass1.ID).order_by(TableClass1.ID.desc()).limit(1)
query2 = db.query(TableClass2.ID).order_by(TableClass2.ID.desc()).limit(1)
query3 = db.query(TableClass3.ID).order_by(TableClass3.ID.desc()).limit(1)
Параметры подключения
engine = create_engine(
f'mssql pyodbc://{SERVER}/{DATABASE}?{DRIVER}')
SessionLocal = sessionmaker(bind=engine)
db = SessionLocal()
ВОПРОС
Однако это своего рода тривиально. Возможно ли создать какой-то вызываемый метод, в котором я могу динамически передавать имена таблиц? Я думал о чем-то вроде:
def query_func(tablename):
query = db.query(tablename.ID).order_by(tablename.ID.desc()).limit(1)
return query
Комментарии:
1. Конечно, но что это за переменная
db
? Как он назначается?2.
db = SessionLocal()
— добавлено к вопросу3. Итак, вы используете FastAPI? В этом случае код функции в вопросе должен работать нормально.
4. Да, я буду использовать это для запуска некоторых запросов с использованием FastAPI. Могу ли я просто передать класс таблицы
query_func()
функции?5. Да, это должно работать нормально, если вы запрашиваете всю таблицу целиком. Для одного атрибута , такого как
id
, вы бы хотелиdb.query(getattr(ModelClass, 'id''))
.