Python 如何将一个ponyorm实体属性与多个其他实体关联?

Python 如何将一个ponyorm实体属性与多个其他实体关联?,python,ponyorm,Python,Ponyorm,我开始使用一个现有数据库,其中表A的属性foo与多个其他表B.foo和C.foo相关。我如何在ponyorm建立这种关系 数据库的组织方式如下所示 从小马导入orm db=orm.Database() 类别POI(数据库实体): “地图上的兴趣点” name=orm.PrimaryKey(str) coordinateID=orm.Optional(('cartesian','polar'))#不适用于ofc 笛卡尔类(db.Entity): coordinateID=所需规格(POI) x=所

我开始使用一个现有数据库,其中表
A
的属性
foo
与多个其他表
B.foo
C.foo
相关。我如何在ponyorm建立这种关系

数据库的组织方式如下所示

从小马导入orm
db=orm.Database()
类别POI(数据库实体):
“地图上的兴趣点”
name=orm.PrimaryKey(str)
coordinateID=orm.Optional(('cartesian','polar'))#不适用于ofc
笛卡尔类(db.Entity):
coordinateID=所需规格(POI)
x=所需规格(浮动)
y=所需规格(浮动)
类极坐标(db.Entity):
coordinateID=所需规格(POI)
r=所需规格(浮动)
φ=所需标准(浮动)

当然,
x
y
来自
cartesian
r
,p
hi
来自
polar
可以移动到
POI
,在我使用的数据库中,情况也是如此。但是这些表是在利益相关者之间划分的(
cartesian
polar
,在本例中),我无论如何都不能更改模式。我不能在模式中拆分
coordinatedId
(但实际上最好有python类的不同属性)。

在PonyORM中,不可能将一个属性与多个实体关联,除非这些实体从同一个基本实体继承,然后,您可以将基本实体指定为属性类型,并将任何继承的实体用作实类型

如果使用无法更改的现有架构,则可能无法使用继承,需要指定原始id属性而不是关系:

从小马导入orm
db=orm.Database()
类别POI(数据库实体):
_table=“table\u name”
name=orm.PrimaryKey(str)
坐标id=orm.可选(int,column=“CoordinatedId”)
类笛卡尔(db2.Entity):
_表=“笛卡尔”
id=orm.PrimaryKey(int,column=“CoordinatedId”)
x=所需规格(浮动)
y=所需规格(浮动)
类Polar(db2.Entity):
_表\=“polar”
id=orm.PrimaryKey(int,column=“CoordinatedId”)
r=所需规格(浮动)
φ=所需标准(浮动)
然后您可以执行如下查询:

left_join(poi中poi的poi
笛卡尔坐标系中的c
极坐标中的p
如果poi.coordinate_id==c.id
和poi.coordinate_id=p.id
及)
请注意,同一查询中使用的所有实体应来自同一数据库。如果实体属于两个不同的数据库,则不能在同一查询中使用它们。并需要发出单独的查询:

使用db_会话的
:
poi=poi.get(id=some_id)
坐标=Cartesian.get(id=poi.coordination\u id)
如果coord为无:
坐标=Polar.get(id=poi.coordination\u id)

例如,在SQLite中,您可以将一个数据库连接到另一个数据库,使它们显示为一个数据库。

这种方法解决了我的问题,但在我看来,这似乎是一种解决方法,解决了最初的问题:答案不是:您不能吗?顺便说一句:
db2
是一个打字错误,很抱歉-我把它们编辑掉了。是的,您可以将attAttribute与两个不相关的实体关联起来。我更新了答案