创建允许“in”op的sqlalchemy hybrid_属性

2024-04-26 07:40:23 发布

您现在位置:Python中文网/ 问答频道 /正文

如何生成一个允许in_子句的^{}?SQLAlchemy^{}是什么样子?在

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()

Tags: inselfidtruepackagedataversioncolumn
1条回答
网友
1楼 · 发布于 2024-04-26 07:40:23

SQLAlchemy在类型为String的表达式上支持+运算符,因此可以将列强制转换为String,然后执行如下操作:

@pkg_id_concat_vers.expression
def pkg_id_concat_vers(cls):
    return cast(cls.package_id, String) + "~~" + cast(cls.version, String)

相关问题 更多 >