我正在学习SQLAlchemy,我在做看似简单的操作时遇到了麻烦。请原谅我,如果我的问题是原始的和基本的,但我不能为我的生活弄清楚如何基本加入我的两张桌子。如何在两个表上进行基本连接?
我的表是这样的:
class User(Base):
""" Basic User definition """
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(Unicode(255))
email = Column(Unicode(255), unique=True)
username = Column(Unicode(255), unique=True)
_password = Column('password', Unicode(60))
contacts = relationship('Contact', backref='users')
contact_groups = relationship('ContactGroups', backref='users')
contact_group_users = relationship('ContactGroupUsers', backref='users')
class Contact(Base):
__tablename__ = 'contacts'
id = Column(Integer, primary_key=True)
user_id = Column(Integer)
contact_id = Column(Integer)
__table_args__ = (ForeignKeyConstraint([contact_id], [User.id]), {})
class ContactGroups(Base):
__tablename__ = 'contact_groups'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'))
group_name = Column(Unicode(255))
contact_group_users = relationship('ContactGroupUsers', backref='contact_groups')
class ContactGroupUsers(Base):
__tablename__ = 'contact_group_users'
id = Column(Integer, primary_key=True)
group_id = Column(Integer, ForeignKey('contact_groups.id'))
user_id = Column(Integer, ForeignKey('users.id'))
我有我的主要User
表。用户可以将其他用户添加为Contact
。为了帮助组织这些联系人,他们可以创建ContactGroups
。
Contact.user_id
和Contact.contact_id
应该是User.id
的外键。
ContactGroupUsers.group_id
是一个外键ContactGroup.id
而每ContactGroupUser.user_id
是一个外键返回到该用户的User.id
。 (也许这是一个可怕的方式做......它可能是,但我学习。反正)
当我查询存在于特定群体的接触,我想检索所有行,其中filter(ContactGroupUsers.group_id == group_id).all()
然后由此将每个ContactGroupUsers.user_id
加入到该用户在Contact
表中的条目中。因此,我将最终得到的结果是:
ContactGroupUsers.group_id | (and then the information present in the contacts table for that user)
所以,我的最后一个问题,我怎么能根据User.id
加入我的两个表ContactGroupUsers
和Contacts
?或者,如果有一种固有的优越方式来做到这一点,请指出正确的方向,这样我至少可以适当地学习。
感谢您的帮助。非常感激。
你尝试过什么到目前为止,看完之后http://docs.sqlalchemy.org/en/rel_0_8 /orm/tutorial.html#querying-with-joins? – cdaddr