point_type
sütununa sahip pbx_point
adında bir üst tablom var. Ayrıcaadında bir alt tablonuz var,adlı bir sütunda pbx_point
'a dönüyoruz.sqlalchemy'de, alt tablonun üst tablasına birden çok yabancı anahtarı olduğunda polimorfik birleşik tablo mirasını nasıl kullanabilirim?
Ben Bu iyi çalışır polimorfik miras
bildirim baz yoluyla bu iki tablo ilgilidir ve kullanımı sqlalchemy en katılmış tablo devralma kullanmak istiyorum -, ederdi, doğrusu ya aşağıdaki ek kısıtlama için değilse: pbx_point
Ayrıca, pbx_route
işaret eden initial_route_id
adlı bir yabancı anahtar vardır.
Aşağıdaki yansımayı da kullanıyorum ama db yukarıda açıkladığım gibidir. Aldığım hata sqlalchemy.exc.AmbiguousForeignKeysError: Can't determine join between 'pbx_point' and 'pbx_route'; tables have more than one foreign key constraint relationship between them. Please specify the 'onclause' of this join explicitly.
.
Bu, "sahnelerin ardında" delişimli temel olarak, eşlenmiş sınıfların her ikisinde de bir ilişki() özniteliği oluşturduğundan anlam ifade eder. Parent_id bağlantısı olarak pbx_route.point_id
'u seçmeyi tercih ediyorum, ancak pbx_point.initial_route_id
sütununu da görüyor. Bu ilişkiyi oluşturuyor olsaydım, düzeltmek kolay olurdu(), ama ben değilim - bildirimsel miras sistemi. beni arzu yabancı anahtar belirtmek izin verirdim polymorphic_parent_col
gibi
Ben __mapper_args__
geçirebilirsiniz bir ek argüman var mı
Teşekkürler.
Traceback (most recent call last):
File "db.py", line 50, in <module>
Base.prepare(engine)
File "env/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/api.py", line 431, in prepare
thingy.map()
File "env/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 379, in map
**mapper_args
File "env/local/lib/python2.7/site-packages/sqlalchemy/orm/__init__.py", line 1147, in mapper
return Mapper(class_, local_table, *args, **params)
File "env/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 213, in __init__
self._configure_inheritance()
File "env/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 517, in _configure_inheritance
self.local_table)
File "env/local/lib/python2.7/site-packages/sqlalchemy/sql/util.py", line 397, in join_condition
"join explicitly." % (a.description, b.description))
sqlalchemy.exc.AmbiguousForeignKeysError: Can't determine join between 'pbx_point' and 'pbx_route'; tables have more than one foreign key constraint relationship between them. Please specify the 'onclause' of this join explicitly.
o https://bitbucket.org/sqlalchemy/sqlalchemy/src/7f3494ebad58/lib/sqlalchemy/orm/mapper.py?at=default#cl-517 ölen gösterir:
class MyBase(DeferredReflection):
@declared_attr
def __tablename__(cls):
return cls.__name__.lower()
Base = declarative_base(cls=MyBase)
class pbx_point(Base):
__mapper_args__ = dict(
polymorphic_on='point_type',
with_polymorphic='*',
)
class pbx_route(pbx_point):
__mapper_args__ = dict(polymorphic_identity='pbx.route')
Bu
alıyorum yığın izidir. Ihtiyacım olan şey gibi görünen, mapper kwarginherit_condition
için referance yapar yukarıdaki birkaç satır.
Tam olarak bu sorunu yaşadım ve dokümanlarda bulamadım. Cevap için teşekkürler. –