在SQLAlchemy中,我们可以像这样声明表及其关系:
user = Table(
'users', metadata,
Column('id', Integer, primary_key=True))
address = Table(
'adresses', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', Integer, ForeignKey('user.id')))
class User(object): pass
class Address(object): pass
session.mapper(User, user, properties=dict(
'address' = relation(Address, backref='user', cascade="all")))
Run Code Online (Sandbox Code Playgroud)
(请注意上面一行中的级联关系.)
但是,我们也可以使用一种称为声明式样式的替代速记样式,在这种样式中我们可以用更少的代码行表达相同的东西,省略mapper()关系:
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
class Adress(Base):
__tablename__ = 'adresses'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('user.id')))
Run Code Online (Sandbox Code Playgroud)
但是,如果我们使用这种声明式样式,是否有另一种方法来定义级联关系?
实际上,使用"声明"并不意味着你省略了关系.你仍然以大致相同的方式指定它们,但是直接在类上作为属性而不是在mapper中:
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
address = relation('Address', backref='user', cascade='all')
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'))
Run Code Online (Sandbox Code Playgroud)
(请注意,我已经修复了"地址"的拼写,以防你剪切并粘贴它.)
该声明文档涵盖这一点.请注意,在简单的情况下,它会计算出自动使用的外键,但如果需要,您可以更明确.
还要注意字符串 的使用,'Address'因为当我在User类中使用它时,尚未定义相关的类.
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |