从SQL语句转换为SQL Alchemy

时间:2013-09-13 13:40:39

标签: python sql orm sqlalchemy relational-database

提前感谢您的帮助。我必须将以下SQL语句转换为SQL炼金术。我之前没有使用SQL Alchemy。

SQL:

SELECT User.id, User.nicknames
FROM users, breadcrumbs
WHERE user_id in my_friend_ids
AND user_id = bc.creator_id
AND bc.location_id = loc_id

my_friend_ids = select friend_id from friends 
                where user_id = requestor_id and status ='approved'

到目前为止我得到了什么:

my_friend_ids =  select([Friend.user_id]).select_from(Friend).\
                 where(and_(Friend.friend_id == user_id,
                 Friend.status == 'approved'))

1 个答案:

答案 0 :(得分:0)

您可以考虑使用子查询。

my_friend_ids = db.session.query( Friend.id ).filter( and_(
    Friend.friend_id == Breadcrumb.creator_id,
    Friend.status == 'approved'
) ).subquery()

q = db.session.query( User, Breadcrumb ).filter( and_(
    User.id.in_( my_friend_ids ),
    Breadcrumb.location_id == loc_id
).all()

现在q将包含适合查询的用户和面包屑对象(可通过q[index].Userq[index].Breadcrumb分别访问)。但这不是很有效。你应该把它作为一个连接来代替。