[英]Creating an sqlalchemy hybrid_property that allows for “in_” operator
你会如何做一个hybrid_property
允许in_
条款? SQLAlchemy expression
什么样的?
class Version(Base):
version_id = Column(Integer, primary_key=True)
package_id = Column(Integer, ForeignKey('package.package_id')
version = Column(String(32), index=True)
@hybrid_property
def pkg_id_concat_vers(self):
# "23~~0.2.4"
return "{}~~{}".format(self.package_id, self.version)
# TODO
#@pkg_id_concat_vers(self):
# pass
# Using the naive `(not) in` doesn't actually apply the filter
data = ['23~~0.2.4', '57~~0.0.1']
result = (session.query(Version)
.filter(Version.pkg_id_concat_vers in data)
).all()
# Using `in_()` throws an Attribute Error, as it's a string.
data = ['23~~0.2.4', '57~~0.0.1']
result = (session.query(Version)
.filter(Version.pkg_id_concat_vers.in_(data))
).all()
SQLAlchemy在类型为String
表达式上支持+
运算符,因此您可以将列转换为String
,然后执行以下操作:
@pkg_id_concat_vers.expression
def pkg_id_concat_vers(cls):
return cast(cls.package_id, String) + "~~" + cast(cls.version, String)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.