从SQLalchemy和Flask中的相关列表中查询

时间:2014-05-02 20:05:03

标签: python flask sqlalchemy flask-sqlalchemy

User has-one Person。因此User.personPerson
我想从User列表中获取Person列表。

我尝试了以下内容:

>>> people = Person.query.filter().limit(3)
<flask_sqlalchemy.BaseQuery object at 0x111c69bd0>

>>> User.query.filter(User.person.in_(people)).all()
NotImplementedError: in_() not yet supported for relationships.  For a simple many-to-one, use in_() against the set of foreign key values.

获取User列表User.person的最佳方法是people列表{{1}}?

2 个答案:

答案 0 :(得分:14)

正如错误消息有用地告诉您,您需要对外键使用in_

User.query.join(User.person).filter(Person.id.in_(p.id for p in people)).all()

既然你要对两者进行查询,最好是加入加载然后让人们使用Python:

people = Person.query.join(Person.user).options(db.contains_eager(Person.user)).limit(3).all()
users = [p.user for p in people]

答案 1 :(得分:0)

您还可以将生成器与import socket import sys import os IP = '127.0.0.1' PORT = 5050 buf = 2048 server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) server.bind((IP,PORT)) data,addr = server.recvfrom(buf) print(str(addr) + ' says' + data.decode('UTF-8')) filename='transferfile.txt' f= open(filename,'rb') l = f.read(1024) while (l): server.sendto(l,addr) print('Sent ',repr(l)) l = f.read(1024) f.close() print('Done sending') server.close() 一起使用:

or_

当您尝试使用带有已接收对象(例如状态)的过滤器来请求记录时,这很有用。