Можно ли передать имя класса таблицы SQLAlchemy в качестве аргумента. в функции Python?

#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'')) .