Skip to content

Instantly share code, notes, and snippets.

@victor-shelepen
Created August 15, 2014 16:20
Show Gist options
  • Save victor-shelepen/4a14713aacc54f8a91dc to your computer and use it in GitHub Desktop.
Save victor-shelepen/4a14713aacc54f8a91dc to your computer and use it in GitHub Desktop.
query_1 = db\
.Query(UserModel, func.count(FriendModel.friend_id).label('friends'))\
.select_from(UserModel)\
.outerjoin(FriendModel, and_(UserModel.id==FriendModel.user_id))\
.group_by(FriendModel.user_id)
s_1 = query_1.subquery('s_1')
query_2 = db\
.session.query(s_1, FriendModel.status)\
.select_from(s_1)\
.join(FriendModel, FriendModel.user_id==s_1.c.id)
print query_2.all()
@victor-shelepen
Copy link
Author

Results:

[(1, u'user6', u'user6@example.com', u'user6', u'request'), (2, u'user7', u'user7@example.com', u'user7', u'request'), (3, u'user4', u'user4@example.com', u'user4', u'request'), (4, u'user5', u'user5@example.com', u'user5', u'request'), (5, u'user2', u'user2@example.com', u'user2', u'request'), (6, u'user3', u'user3@example.com', u'user3', u'request'), (7, u'user1', u'user1@example.com', u'user1', u'request'), (8, u'admin', u'admin@exampdasde.sda', u'admin', u'decision'), (8, u'admin', u'admin@exampdasde.sda', u'admin', u'decision'), (8, u'admin', u'admin@exampdasde.sda', u'admin', u'decision'), (8, u'admin', u'admin@exampdasde.sda', u'admin', u'decision'), (8, u'admin', u'admin@exampdasde.sda', u'admin', u'decision'), (8, u'admin', u'admin@exampdasde.sda', u'admin', u'decision'), (8, u'admin', u'admin@exampdasde.sda', u'admin', u'decision'), (8, u'admin', u'admin@exampdasde.sda', u'admin', u'accepted'), (8, u'admin', u'admin@exampdasde.sda', u'admin', u'decision'), (8, u'admin', u'admin@exampdasde.sda', u'admin', u'decision'), (8, u'admin', u'admin@exampdasde.sda', u'admin', u'decision'), (8, u'admin', u'admin@exampdasde.sda', u'admin', u'accepted'), (8, u'admin', u'admin@exampdasde.sda', u'admin', u'decision'), (9, u'viktor', u'viktor@example.com', u'viktor', u'confirmed'), (10, u'user8', u'user8@example.com', u'user8', u'request'), (11, u'user9', u'user9@example.com', u'user9', u'request'), (12, u'user10', u'user10@example.com', u'user10', u'request'), (13, u'elena', u'elena@example.com', u'elena', u'confirmed'), (14, u'guest', u'guest@example.com', u'guest', u'request')]

@victor-shelepen
Copy link
Author

I want to make working the way:

query_1 = db
.Query(UserModel, func.count(FriendModel.friend_id).label('friends'))
.select_from(UserModel)
.outerjoin(FriendModel, and_(UserModel.id==FriendModel.user_id))
.group_by(FriendModel.user_id)
s_1 = query_1.subquery('s_1')

query_2 = db
.Query(s_1, FriendModel.status)
.select_from(s_1)
.join(FriendModel, FriendModel.user_id==s_1.c.id)

print query_2.paginate(1, 2)

It invokes an error.
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with FriendModel.status has an attribute '_autoflush'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment