Следующее решение использует язык выражений SQLAlchemy и работает с SQLAlchemy 1.1.Это решение не смешивает параметры с запросом (как было запрошено первоначальным автором), но предоставляет способ использования моделей SQLAlchemy для генерации строк запроса SQL и словарей параметров для различных диалектов SQL.Пример основан на учебном пособии http://docs.sqlalchemy.org/en/rel_1_0/core/tutorial.html
Учитывая класс
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class foo(Base):
__tablename__ = 'foo'
id = Column(Integer(), primary_key=True)
name = Column(String(80), unique=True)
value = Column(Integer())
, мы можем создать оператор запроса, используя функцию select .
from sqlalchemy.sql import select
statement = select([foo.name, foo.value]).where(foo.value > 0)
Далее мы можем скомпилировать оператор в объект запроса.
query = statement.compile()
По умолчанию оператор скомпилирован с использованием базовой «именованной» реализации, совместимой с базами данных SQL, такими как SQLite иOracle.Если вам нужно указать диалект, такой как PostgreSQL, вы можете сделать
from sqlalchemy.dialects import postgresql
query = statement.compile(dialect=postgresql.dialect())
. Или, если вы хотите явно указать диалект как SQLite, вы можете изменить стиль элемента с «qmark» на «named».
from sqlalchemy.dialects import sqlite
query = statement.compile(dialect=sqlite.dialect(paramstyle="named"))
Из объекта запроса мы можем извлечь строку запроса и параметры запроса
query_str = str(query)
query_params = query.params
и, наконец, выполнить запрос.
conn.execute( query_str, query_params )