我正在学习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
?或者,如果有一个内在的优越的方法来做这件事,请给我指出正确的方向,这样我至少可以适当地学习。你知道吗
谢谢你的帮助。非常感谢。你知道吗
由于要将多个外键定义回
User
中的Contact
,因此最好按以下方式定义它们:以这种格式建立关系可能有点复杂,涉及到
aliased
实例的用户。例如,您可以进行如下查询,指出某个组id下给定用户的所有联系人:相关问题 更多 >
编程相关推荐