SQLAlchemy sınıflarının birkaç dosyaya nasıl dağıldığını anlamaya çalışıyorum ve hayatım boyunca bunu nasıl yapacağımı çözemiyorum. SQLAlchemy'de oldukça yeniyim, bu yüzden bu soru önemsizse beni affedin ..
Her biri kendi dosyasında bulunan bu 3 sınıfı düşünün :
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"))
Ve sonra şöyle bir main.py'imiz olduğunu söyleyin :
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()
Yukarıdakiler hatayı verir:
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'
Bildirim temelini bu dosyalar arasında nasıl paylaşırım?
Bunun üzerine Direk veya Turbogears gibi bir şey atabileceğimi düşünürsek, bunu başarmanın "doğru" yolu nedir?
düzenle 10-03-2011
Bu açıklamayı, sorunu tanımlayan ve daha da önemlisi bunun gerçek bir sorun olduğunu doğrulayan Piramitler çerçevesinden buldum ve (sadece) sadece kafa karışıklığım değil, sorun bu. Umarım bu tehlikeli yolda cesaret edenlere yardımcı olabilir :)