SQLAlchemy скомпилированный оператор без знаков процента условно экранированный - PullRequest
0 голосов
/ 12 июня 2018

Есть ли способ получить скомпилированный оператор 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 % {})

1 Ответ

0 голосов
/ 12 июня 2018

Не проще ли просто .startswith () ColumOperator создать свой лайк, выполнив

statement = select([User.name]).where(User.name.startswith('bob')).limit(10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...