Как выполнить пользовательский SQL-запрос во время выполнения, используя SQLAlchemy? - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть реализация варианта использования, для которой я пытаюсь определить решение, реализация выглядит следующим образом:

  • Пользователь определяет параметры подключения к SQL-серверу, например DATABASE_TYPE (например, MySQL, pgsql, sqliteили любой дБ, поддерживаемый SQLAlchemy), HOST, PORT, SCHEMA_NAME, USER_NAME и PASSWORD
  • Затем пользователь выполняет TEST CONNECTION для проверки предоставленных параметров соединения и предоставляет обратную связь SUCCESS и FAILURE
  • On SUCCESS, пользователь будет вводить в SQL-запрос (в соответствии с SQLAlchemy SQL Expression Language более подробную информацию здесь ), который должен быть выполнен.

Если вы заметили выше всех параметров для SQLAlchemy дляРабота определяется пользователем во время выполнения, я пытаюсь реализовать функцию в Python, которая использует вышеуказанные параметры подключения и SQL-запрос, выполняет запрос при успешном подключении и возвращает результат запроса.Любая точка направления или помощь в этом была бы отличной.

Спасибо

1 Ответ

1 голос
/ 01 февраля 2012

У меня что-то подобное в рамках более крупного проекта, пока только для sqlite и postgres, но это можно обобщить.

Для начала, если вы ожидаете, что пользователь будет знать DATABASE_TYPE (например, MySQL, pgsql, sqlite или любой дБ, поддерживаемый SQLAlchemy), HOST, PORT, SCHEMA_NAME, USER_NAME и PASSWORD, вы можете просто попросить URL БД, чтобы сделать вашу жизнь немного проще

После этого вы можете проверить соединение по:

    from sqlalchemy import create_engine
    try:
        engine = create_engine(url)           
        connection = engine.connect()
        connection.close()
    except Exception, e:
        LOGGER.exception(e)
        raise MyCusomException('Could not initialize db. Invalid URL.') 

Cusom SQL-запросы могут быть выполнены с использованием конструкции text (), как показано здесь .

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