मेरे पास pbx_point
नामक एक मूल तालिका है जिसमें point_type
कॉलम है। मेरे पास pbx_route
नामक एक बाल तालिका भी है, जिसे point_id
नामक कॉलम के साथ pbx_point
पर इंगित किया गया है।sqlalchemy में, मैं पॉलिमॉर्फिक तालिका तालिका विरासत का उपयोग कैसे कर सकता हूं जब बच्चे की तालिका में मूल तालिका में एकाधिक विदेशी कुंजी होती है?
मैं SQLAlchemy के शामिल हो गए तालिका विरासत का उपयोग करने के कथात्मक आधार के माध्यम से इन दो तालिकाओं संबंधित हैं, और प्रयोग बहुरूपी विरासत
यह ठीक काम करता है करना चाहते हैं -, यह होगा, बल्कि या यदि निम्न अतिरिक्त बाधा के लिए नहीं: pbx_point
initial_route_id
नामक एक विदेशी कुंजी भी है जिसे pbx_route
पर इंगित किया गया है।
मैं नीचे प्रतिबिंब का उपयोग भी कर रहा हूं, लेकिन डीबी जैसा मैंने ऊपर वर्णित किया है। मुझे मिली त्रुटि 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.
है।
यह समझ में आता है, "दृश्यों के पीछे" delcarative आधार मैप किए गए वर्गों पर एक रिश्ते() विशेषता बना रहा है। मैं इसे pbx_route.point_id
को parent_id लिंक के रूप में चुनना चाहता हूं, लेकिन यह pbx_point.initial_route_id
कॉलम भी देखता है। यह ठीक करना आसान होगा, अगर मैं यह रिश्ता बना रहा था(), लेकिन मैं नहीं हूं - घोषणात्मक विरासत प्रणाली है।
क्या कोई अतिरिक्त तर्क है कि मैं __mapper_args__
पर जा सकता हूं, जैसे polymorphic_parent_col
जो मुझे अपनी इच्छित विदेशी कुंजी निर्दिष्ट करने देगी? यदि नहीं, तो मैं इस मुद्दे के आसपास कैसे काम कर सकता हूं?
धन्यवाद।
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.
जो इंगित करता है यह https://bitbucket.org/sqlalchemy/sqlalchemy/src/7f3494ebad58/lib/sqlalchemy/orm/mapper.py?at=default#cl-517 पर मर रहा है:
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')
यह स्टैक ट्रेस मैं हो रही है। इससे ऊपर की कुछ पंक्तियां मैपर kwarg inherit_condition
को संदर्भित करती हैं, जो मुझे चाहिए।
मुझे यह सही समस्या थी और इसे दस्तावेज़ों में नहीं मिला। जवाब के लिए धन्यवाद। –