В следующем решении используется язык выражения 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()
По умолчанию, оператор компилируется с использованием базовой реализации «named», которая совместима с базами данных SQL, такими как SQLite и Oracle. Если вам нужно указать диалект, такой как PostgreSQL, вы можете сделать
from sqlalchemy.dialects import postgresql
query = statement.compile(dialect=postgresql.dialect())
. Если вы хотите явно указать диалект как SQLite, вы можете изменить paramstyle с «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 )
Если ваш столбец определен как число (10), он должен быть округлен до 3 при вставке. Я подозреваю, что ваши реальные данные больше, чем 2,58. В любом случае, ваш столбец должен быть определен как число (12,2), то есть всего 12 цифр, 2 из которых слева от десятичной точки. то есть 9999999999,99