简体   繁体   中英

How to use Python expression only as hybrid property in SQL Alchemy

I have a SQL Alchemy mapping:

class Employee(Base):
  __tablename__ = 'employee'

  id = Column(Integer, primary_key=True)
  first_name = Column(String)
  last_name = Column(String)

  @hybrid_property
  def me(self):
    return 'Yes!' if self.first_name == 'ritratt' else 'Nope...'

Now I simply want to do a query like so: session.query(Employee.me).all()

But it does not work because SQL Alchemy expects a column or expression instead of a str . The solution is to use hybrid_expression but I do not want to use expressions. I want my mapping to only use hybrid property.

How can I write a mapping with a hybrid_property that returns a str and work with query() ?

I found a hacky way around it. I use Python to derive the value and then wrap it either in cast or concat :

from sqlalchemy import cast, String

...

@hybrid_property
  def me(self):
    value = 'Yes!' if self.first_name == 'ritratt' else 'Nope...'
    return cast(value, String) # or return concat('', value)

This still seems a bit hacky. Wondering if a better way exists

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM