python - SQLAlchemy:在关系()上使用 like()

标签 python sqlalchemy

我的设置如下所示:

class Name(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Text)

class Person(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name_id = db.Column(db.Integer, db.ForeignKey('name.id'))

    _name = db.relationship('Name')

    @property
    def name(self):
        return self._name.name

例如,调用 Person.name 返回一个包含其实际姓名的字符串。

我正在基于此构建一个 RESTful API。我需要允许根据人名使用通配符进行搜索。我正在寻找的功能是:

Person.query.filter(Person.name.like('Z%')) 会选择 Zack、Zed、Zoo 等。但是,您不能使用 .like() 位于 name 上,因为它是一个属性,而不是一个列。

有办法解决这个问题吗?

最佳答案

您的关系称为_name,因此您需要在查询中使用它。你会想做这样的事情:

people = DBSession.query(Person)\
    .join(Person._name)\
    .filter(Name.name.like('Z%'))\
    .all()

# or more explicitly without using the relationship:

people = DBSession.query(Person)\
    .join(Name, Person.name_id == Name.id)\
    .filter(Name.name.like('Z%'))\
    .all()

顺便说一句,拥有 Person 类和 Name 类似乎有点奇怪......但也许您的用例证明这是合理的。

http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#querying-with-joins

关于python - SQLAlchemy:在关系()上使用 like(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31544728/

相关文章:

python - 有没有办法将列表插入到 python 中的 .format 方法中?

python - 为什么 dnspython 给我这个错误?

javascript - Django 和 jQuery 的困难(为什么 $ 在管理应用程序中未定义?)

python - 如何从 Python + SQLAlchemy 连接到高可用性 SQL Server

python - SQLAlchemy - 如何否定 ANY 表达式

python - 无法使用 SQLAlchemy 删除对象实例

python - Django 外键的模型字段未正确更新

python - QMessageBox 在计算时阻止父级

python - 如何在 SQLAlchemy 中查看连接表的列名?

python - 使用脚本语言动态数据库