class User(Base):
id = Column(IdDataType, primary_key=True)
name = Column(Unicode(50))
class Group(Base):
id = Column(IdDataType, primary_key=True)
name = Column(Unicode(50))
members = relationship('User', secondary='group_members', backref='memeber_groups')
group_members = Table('group_members', Base.metadata,
Column('group_id', IdDataType, ForeignKey('group.id')),
Column('user_id', IdDataType, ForeignKey('user.id')),
Column('join_time', DateTime, default=datetime.now)
)
User
和Group
是多种关系,现在我想找到count(users)
group.id=3
和join_time
是between now and preivew week
,如何在sqlalchemy中创建这个SQL
答案 0 :(得分:0)
这更像是一个关联对象,而不是直接的多对多关系,所以我将其设置为:
class User(Base):
id = Column(Integer, primary_key=True)
name = Column(Unicode(50), nullable=False, unique=True)
class Group(Base):
id = Column(Integer, primary_key=True)
name = Column(Unicode(50), nullable=False, unique=True)
class Membership(Base):
user_id = Column(Integer, ForeignKey(User.id), primary_key=True)
group_id = Column(Integer, ForeignKey(Group.id), primary_key=True)
joined_on = Column(DateTime, nullable=False, default=datetime.utcnow, server_default=func.current_timestamp())
user = relationship(User, backref=backref('memberships', collection_class=set))
group = relationship(Group, backref=backref('memberships', collection_class=set))
User.groups = association_proxy('memberships', 'group')
Group.users = association_proxy('memberships', 'user')
查询如下所示:
session.query(Membership.user_id).filter(Membership.group_id == 3, Membership.joined_on.between(previous, now)).count()