Есть ли способ получить скомпилированный оператор SQLAlchemy без условного экранирования знаков процента ?
В следующем примере MySQL:
from sqlalchemy import Column, Integer, String
from sqlalchemy.dialects import mysql
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql import select
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer(), primary_key=True)
name = Column(String(80), unique=True)
statement = select([User.name]).where(User.name.like('bob%')).limit(10)
query = str(statement.compile(dialect=mysql.dialect(), compile_kwargs={'literal_binds': True}))
print(query)
создает скомпилированный оператор с экранированным знаком процента:
SELECT users.name
FROM users
WHERE users.name LIKE 'bob%%'
LIMIT 10
вместо:
SELECT users.name
FROM users
WHERE users.name LIKE 'bob%'
LIMIT 10
Я так понимаю, чтобы убедиться, что строка может быть правильно отформатирована с использованием стиля параметров MySQL pyformat .Является ли правильная логика для получения более позднего утверждения просто:
print(query % {})