मैं अपने डेटाबेस से तालिकाओं के समूह को दर्शाने के लिए sqlacodegen
का उपयोग कर रहा हूं। और मुझे निम्न त्रुटि मिल रही है:
sqlalchemy.exc.AmbiguousForeignKeysError: 'कर्मचारी' और 'बिक्री' के बीच जुड़ने का निर्धारण नहीं कर सकता; तालिकाओं में उनके बीच एक से अधिक विदेशी कुंजी बाधा संबंध होते हैं। कृपया इस जॉइन का 'ऑनक्लॉज' स्पष्ट रूप से निर्दिष्ट करें।
यहाँ मेरी तालिकाओं का एक सरलीकृत संस्करण है। मैंने प्रलेखन में पढ़ा है कि मुझे विदेशी प्रमुख लक्ष्यों के बीच अस्पष्टता को हल करने के लिए foreign_keys
पैरामीटर का उपयोग करना चाहिए। हालाँकि, मुझे लगता है कि यह समस्या विरासत के कारण है। क्या कोई मुझे यह समझने में मदद कर सकता है कि क्या हो रहा है।
# coding: utf-8
from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
Base = declarative_base()
class Employee(Base):
__tablename__ = 'Employee'
EmployeeId = Column(Integer, primary_key=True)
class Sales(Employee):
__tablename__ = 'Sales'
EmployeeID = Column(ForeignKey('Employee.EmployeeId'), primary_key=True)
OldemployeeID = Column(ForeignKey('Employee.EmployeeId'))
employee = relationship('Employee', foreign_keys=[EmployeeID])
old_employee = relationship("Employee", foreign_keys=[OldemployeeID])
2 जवाब
जब आपकी तालिकाओं में उनके बीच इनहेरिट करने के लिए कई संभावित पथ हों (Sales.EmployeeID
या Sales.OldEmployeeID
), SqlAlchemy नहीं जानता कि किसका उपयोग करना है और आपको इसकी आवश्यकता होगी inherit_condition
का उपयोग करके इसे स्पष्ट रूप से पथ बताएं। उदाहरण के लिए कर्मचारी आईडी
द्वारा इनहेरिट करने के लिए:
class Sales(Employee):
...
__mapper_args__ = { "inherit_condition": EmployeeID == Employee.EmployeeId }
उदाहरण के लिए, आप OldEmployeeID
द्वारा, OldEmployeeID == Employee.EmployeeId
दर्ज करके भी इनहेरिट कर सकते हैं - इसका मतलब यह होगा कि आपकी Sales
प्राथमिक कुंजी और Employee
प्राथमिक कुंजी दोनों की अनुमति है अलग बनो।
बस बैकरेफ का उपयोग करें और कर्मचारी आईडी और पुराने कर्मचारी आईडी दोनों पर इंटीजर का उपयोग करें। अन्यथा आपको एक और त्रुटि मिलेगी।
class Sales(Employee):
__tablename__ = 'Sales'
EmployeeID = Column(Integer, ForeignKey('Employee.EmployeeId'), primary_key=True)
OldemployeeID = Column(Integer, ForeignKey('Employee.EmployeeId'))
employee = relationship('Employee', foreign_keys=[EmployeeID], backref='Employee')
old_employee = relationship("Employee", foreign_keys=[OldemployeeID], backref='Employee')
AmbiguousForeignKeysError
। यह तब होता है जब मैं वही फाइल चलाता हूं जहां मैंने इन दो वर्गों को परिभाषित किया है।
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।
sqlacodegen
चलाता हूं तो मेरी कुछ तालिकाएं इस प्रकार दिखाई देती हैं।