मैं यह पता लगाने की कोशिश कर रहा हूं कि SQLAlchemy कक्षाएं कई फ़ाइलों में कैसे फैली हैं, और मैं अपने जीवन के लिए यह पता नहीं लगा सकता कि यह कैसे करना है। मैं SQLAlchemy के लिए बहुत नया हूँ तो मुझे माफ कर दो अगर यह सवाल तुच्छ है ..
अपनी प्रत्येक फ़ाइल में इन 3 वर्गों पर विचार करें :
A.py:
from sqlalchemy import *
from main import Base
class A(Base):
__tablename__ = "A"
id = Column(Integer, primary_key=True)
Bs = relationship("B", backref="A.id")
Cs = relationship("C", backref="A.id")
B.py:
from sqlalchemy import *
from main import Base
class B(Base):
__tablename__ = "B"
id = Column(Integer, primary_key=True)
A_id = Column(Integer, ForeignKey("A.id"))
C.py:
from sqlalchemy import *
from main import Base
class C(Base):
__tablename__ = "C"
id = Column(Integer, primary_key=True)
A_id = Column(Integer, ForeignKey("A.id"))
और फिर कहते हैं कि हम एक है main.py कुछ इस तरह:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref, sessionmaker
Base = declarative_base()
import A
import B
import C
engine = create_engine("sqlite:///test.db")
Base.metadata.create_all(engine, checkfirst=True)
Session = sessionmaker(bind=engine)
session = Session()
a = A.A()
b1 = B.B()
b2 = B.B()
c1 = C.C()
c2 = C.C()
a.Bs.append(b1)
a.Bs.append(b2)
a.Cs.append(c1)
a.Cs.append(c2)
session.add(a)
session.commit()
उपरोक्त त्रुटि देता है:
sqlalchemy.exc.NoReferencedTableError: Foreign key assocated with column 'C.A_id' could not find table 'A' with which to generate a foreign key to target column 'id'
मैं इन फ़ाइलों में घोषणात्मक आधार कैसे साझा करूं?
इसे पूरा करने का "सही" तरीका क्या है, इस पर विचार करते हुए कि मैं इसके ऊपर पाइलन्स या टर्बोगियर्स जैसा कुछ फेंक सकता हूं ?
10-03-2011 को संपादित करें
मुझे यह वर्णन पिरामिड फ्रेमवर्क से मिला है जो समस्या का वर्णन करता है और अधिक महत्वपूर्ण बात यह सत्यापित करता है कि यह एक वास्तविक मुद्दा है और केवल (केवल) ही मेरे भ्रमित होने की समस्या नहीं है। आशा है कि यह उन लोगों की मदद कर सकता है जो इस खतरनाक सड़क की हिम्मत करते हैं :)