2015-02-10 52 views
4

我使用sqlalchemy ORM。我有以下的自定義字段類型和表映射類:SQLAlchemy:運算符LIKE和自定義類型

class JSONEncodedDict(TypeDecorator): 
    impl = VARCHAR 

    def process_bind_param(self, value, dialect): 
     if value is not None: 
      value = json.dumps(value) 

     return value 

    def process_result_value(self, value, dialect): 
     if value is not None: 
      value = json.loads(value) 
     return value 

Base = declarative_base() 
class Task(Base): 
    __tablename__ = 'tasks' 

    id = Column(INT, primary_key=True) 
    description = Column(JSONEncodedDict) 
    created = Column(TIMESTAMP) 
    updated = Column(TIMESTAMP) 

我想查詢使用操作符「喜歡」 objcts:

tasks = session.query(Task).filter(Task.description.like("%some pattern%")).all() 

但就我所看到的,方法process_bind_param也轉換參數like運營商。所以在SQL跟蹤我看到

...WHERE description LIKE '"%some pattern%"'

,而不是

...WHERE description LIKE '%some pattern%'

所以沒有行匹配。

如何以我想要的方式使用LIKE運算符執行查詢?

回答

3

有可能使用literal()繞過自動式處理(或強迫自己與type_參數):

Task.description.like(literal("%some pattern%")) 
+0

是否有訪問,如果在自定義類型正在使用'like'條款的方式? – Kazanz 2018-02-22 15:59:37