我的设置如下所示:
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/