SQLAlchemy: динамически передавать схему и имя таблицы, избегая SQL-инъекций - PullRequest
0 голосов
/ 27 июня 2019

Как выполнить запрос SQL, в котором схема и имя таблицы передаются в функцию?Что-то вроде ниже?

def get(engine, schema: str, table: str):
    query = text("select * from :schema.:table")

    result = engine.connect().execute(query, schema=schema, table=table)
    return result

1 Ответ

0 голосов
/ 27 июня 2019

Здесь происходит две вещи:

  1. Как избежать SQL-инъекций
  2. Динамическая настройка схемы с (предположительно) PostgreSQL

Первый вопрос имеет очень широкую сферу. Возможно, вы захотите взглянуть на более старые вопросы об SQLAlchemy и SQL-инъекции, например, вот этот SQLAlchemy + SQL-инъекция

Ваш второй вопрос может быть решен несколькими способами, хотя я рекомендую следующий подход из документации SQLAlchemy: https://docs.sqlalchemy.org/en/13/dialects/postgresql.html#remote-schema-table-introspection-and-postgresql-search-path

PostgreSQL поддерживает команду «путь поиска», которая устанавливает схему для всех операций в транзакции.

Ваш код запроса может выглядеть следующим образом:

qry_str = f"SET search_path TO {schema}";

В качестве альтернативы, если вы используете декларативный подход SQLAlchemy, вы можете использовать объект MetaData, как в этом вопросе / ответе Поддержка SQLAlchemy схем Postgres

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...