【发布时间】:2016-04-13 09:48:14
【问题描述】:
有四张桌子; users、company、company_branch 和 users_branch。用户是属于公司的人。公司有分支机构,用户可以在任何给定时间属于单个分支机构。但是,users_branch 表的存在是为了跟踪从一个分支更改到另一个分支的历史记录。例如。要获取 id 为 1 的用户的当前分支,可以运行 SELECT company_id, company_branch_id FROM users_branch WHERE user_id = 1 ORDER BY created_at DESC LIMIT 1。
我面临的挑战是,我无法找出正确的非 SQLAlchemy ORM 语法,但也无法找出 SQL 原始来获取特定公司在给定时间的用户列表,并在为每个条目返回 users_id, users_email_address, company_id, company_name, compancy_branch_id and company_branch_name 时这样做.到目前为止,我尝试过的查询要么不返回任何内容,要么在 users_branch 中返回重复值,因为我只想要每个用户的最新分支
Here is the link 到 sqlfiddle 示例 postgresql 数据库。在 SQAlchemy 中,模型为 Users, Company, CompanyBranch, UsersBranch,如下所示:
class Users(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
email_address = Column(String(70), nullable=False, unique=True)
class Company(Base):
__tablename__ = 'company'
id = Column(Integer, primary_key=True)
created_at = Column(DateTime, server_default=text('NOW()'), nullable=False)
created_by = Column(ForeignKey('users.id'), nullable=False)
company_name = Column(String(100), nullable=False, unique=True)
class CompanyBranch(Base):
__tablename__ = 'company_branch'
id = Column(Integer, primary_key=True)
created_at = Column(DateTime, server_default=text('NOW()'), nullable=False)
created_by = Column(ForeignKey('users.id'), nullable=False)
company_id = Column(ForeignKey('company.id'), nullable=False)
branch_name = Column(String(100), nullable=False, unique=True)
class UsersBranch(Base):
__tablename__ = 'users_branch'
id = Column(Integer, primary_key=True)
created_at = Column(DateTime, server_default=text('NOW()'), nullable=False)
created_by = Column(ForeignKey('users.id'), nullable=False)
user_id = Column(ForeignKey('users.id'), nullable=False)
company_id = Column(ForeignKey('company.id'), nullable=False)
company_branch_id = Column(ForeignKey('company_branch.id'), nullable=False)
【问题讨论】:
标签: python postgresql sqlalchemy