0

我正在尝试定义一个可以描述以下关系的 SQLAlchemy/Elixer 模型。我有一个 SSP 表,它有多个 POC 表的外键。我已经在 SSP 对象中正确定义了 ManyToOne 关系(允许我SSP.get(1).action.first_name正确定义)。我还想补充的是这种关系的另一面,我可以执行类似的操作POC.get(1).csa并返回一个 SSP 对象列表,其中将此 POC 定义为 idPOCCSA。

我知道这对于多态关联来说是最好的,但我真的根本无法更改数据库模式(创建一个带有type关联列的新 poc2ssp 表)。

class POC(Entity):
  using_options(tablename = 'poc', autoload = True)

  # These two line visually display my "issue":
  # csa = OneToMany('SSP')
  # action = OneToMany('SSP')


class SSP(Entity):
  '''
  Many to One Relationships:
  - csa: ssp.idPOCCSA = poc.id
  - action: ssp.idPOCAction = poc.id
  - super: ssp.idSuper = poc.id
  '''
  using_options(tablename = 'spp', autoload = True)

  csa = ManyToOne('POC', colname = 'idPOCCSA')
  action = ManyToOne('POC', colname = 'idPOCAction')
  super = ManyToOne('POC', colname = 'idPOCSuper')

有什么想法可以做到这一点吗?Elixer FAQ 有一个利用 primaryjoin 和 foreign_keys 参数的好例子,但我在文档中找不到它们。我有点希望 OneToMany() 只支持像 ManyToOne() 这样的 colname 参数。稍微不那么冗长的东西。

4

1 回答 1

1

尝试以下操作:

class POC(Entity):
  # ...
  #declare the one-to-many relationships
  csas = OneToMany('SSP')
  actions = OneToMany('SSP')
  # ...

class SSP(Entity):
  # ...
  #Tell Elixir how to disambiguate POC/SSP relationships by specifying
  #the inverse explicitly.
  csa = ManyToOne('POC', colname = 'idPOCCSA', inverse='csas')
  action = ManyToOne('POC', colname = 'idPOCAction', inverse='actions')
  # ...    
于 2009-10-05T14:59:56.213 回答