`
zjxplq
  • 浏览: 40528 次
  • 性别: Icon_minigender_1
  • 来自: 绍兴
社区版块
存档分类
最新评论

两个外键连到同一张表

 
阅读更多

 have extracted the relevant parts of my model and I got to something 
that could become a FAQ item or a tutorial or an addition to the docs? 
The question is which and where? Here is the code. The one thing that 
still puzzles me is that I had to move my State table declaration 
before Policy as using "State.code" or something similar didn't work.

class State(DeclarativeBase): 
    __tablename__ = 'state'

    code = Column(String(2), primary_key=True) 
    name = Column(String(50))

class Policy(DeclarativeBase): 
    __tablename__ = 'policy'

    id = Column(Integer, primary_key=True) 
    state_of_policy_code = Column(String(2) ,ForeignKey('state.code')) 
    state_of_domicile_code = Column(String(2) ,ForeignKey('state.code')) 
    policy_state = 
relation('State',backref='state_policies',primaryjoin=state_of_policy_code= =State.code) 
    domicile_state = 
relation('State',backref='domicile_policies',primaryjoin=state_of_domicile_ code==State.code)

#test code to ran, maybe in a python shell for proper feedback. 
ny = model.State() 
ny.code = 'ny' 
fl = model.State() 
fl.code = 'fl' 
p = model.Policy() 
p.policy_state = ny 
p.domicile_state = fl 
model.save(p) 
model.DBSession.flush()#note this is TurboGears place for SQLAlchemy's 
session object. 
ny.state_policies[0].policy_state.code 

 

you can use strings with Python in them when you use declarative even 
with args like primaryjoin, so you could say things like: 

class Policy(DeclarativeBase): 
    __tablename__ = 'policy'

    policy_state = 
relation('State',backref='state_policies',primaryjoin="Policy.state_of_poli cy_code==State.code") 
    domicile_state = 
relation('State',backref='domicile_policies',primaryjoin="Policy.state_of_d omicile_code==State.code")

this would eliminate the need to have your classes in a particular 

分享到:
评论

相关推荐

    Mysql正式/测试数据库表结构差异对比

    3. **比较表结构**:逐个比较两个数据库中的表,查找表名的差异以及每个表中字段(列)的差异,如字段数量、字段名称、字段类型、主键、外键等。 4. **反馈结果**:将发现的差异以清晰易懂的方式呈现给用户,可能是...

    Sql Server中一个表2个字段关联同一个表(代码解决)

    在SQL Server数据库设计中,有时候会遇到一个表的两个字段需要关联到同一个表的情况,这通常发生在需要通过多个关联字段获取同一张表的不同信息时。本文将深入探讨如何解决这个问题,以及提供相应的代码示例。 首先...

    数据库知识点记录数据库知识点记录

    例如,拿转账来说,假设用户 A 和用户 B 两者的钱加起来一共是 20000,那么不管 A 和 B 之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是 20000,这就是事务的一致性。 3. 隔离性(Isolation):...

    hibernate 学习笔记4

    在这个关联表中,我们会定义两个外键,一个指向 `Student` 表的主键 (`sfid`),另一个指向 `Course` 表的主键 (`cfid`)。 在 Hibernate 映射文件 `student.hbm.xml` 中,这部分的配置如下所示: ```xml ``` ...

    ado.net Entity Framework学习 CSEFEntityDataModel

    在EF中,这需要一个中间表来存储双方实体的连接信息,并在两个实体类中都定义导航属性指向这个中间表。 压缩包中的文件列表揭示了项目结构: - **App.Config**:这是应用程序的配置文件,通常包含数据库连接字符串...

    数据库习题终稿(附答案).doc

    2. **外联接**:外联接是一种特殊的联接类型,它可以在联接的结果集中包含那些至少在一个表中有匹配行的记录,而不仅仅是同时存在于两个表中的记录。这对于保留不完全匹配的记录非常有用。 3. **DBMS (Database ...

    oracle数据库学习笔记

    - **实体完整性**: 主键的唯一性,防止同一张表中出现重复记录。 - **参照完整性**: 外键约束,确保引用的完整性,即主表中的每一项记录必须存在于从表中。 - **自定义完整性**: 通过定义约束条件(如 CHECK 约束)...

    hibernate学习笔记

    - **唯一外键关联映射**:通过唯一外键来关联两个实体。 - **一对多关联映射**: - **单向关联**:一方只知道另一方的存在,但另一方不知道这一方。 - **双向关联**:双方都知道对方的存在。 - **多对多关联...

    SQL Server Blocking and Deadlock

    - **死锁**:当两个或更多个事务互相等待对方释放锁时,就会形成死锁。死锁会导致事务无法继续执行。 - **解决方法**: - 使用死锁检测机制,自动解决死锁。 - 调整事务顺序,避免死锁发生。 - 优化应用程序...

    SQLOracle21天自学通

    - **等值联合**:当两个表格中有相同的字段时,可以使用等值联合来连接这两个表格。 - **不等值联合**:当连接条件不是简单的等式时,可以使用不等值联合。 - **外部联合与内部联合**:外部联合(OUTER JOIN)包括左...

    jpivot学习总结.doc

    type 类型,有两个可选的类型: StandarDimension 和 TimeDimension ,默认为 StandardDimension caption 标题 , 在表示层显示的 UsagePrefix 加前缀 , 消除歧义 foreignKey 外键,对应事实表中的一个列,它...

    数据库与基本表的创建、修改与删除

    `用于维护引用完整性,关联两个表的列。 8. **查询操作**: 使用`SELECT`语句进行数据查询,如`SELECT * FROM table_name;`可获取表中的所有数据。实验中对12张表进行了查询,这有助于理解数据间的关系。 实验...

    oracle考试题目.docx

    - 考虑到年薪计算,可以假设一年工作时间为12个月。 - SQL语句:`SELECT ename, sal * 12 AS annual_salary FROM emp ORDER BY annual_salary DESC;` 12. **列出所有雇员的雇员名称、部门名称和薪金。** - SQL...

Global site tag (gtag.js) - Google Analytics