Tôi đang cố gắng tìm ra cách để các lớp SQLAlchemy trải rộng trên một số tệp và tôi có thể suốt đời không tìm ra cách làm điều đó. Tôi còn khá mới với SQLAlchemy vì vậy hãy tha thứ cho tôi nếu câu hỏi này là tầm thường ..
Hãy xem xét 3 lớp này trong mỗi tệp riêng của chúng :
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"))
Và sau đó giả sử chúng tôi có một main.py một cái gì đó như thế này:
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()
Ở trên đưa ra lỗi:
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'
Làm cách nào để chia sẻ cơ sở khai báo trên các tệp này?
Cách "đúng đắn" để thực hiện điều này là gì, khi tôi có thể ném thứ gì đó như Pylons hoặc Turbogears lên trên nó?
chỉnh sửa 10-03-2011
Tôi tìm thấy mô tả này từ khung Kim tự tháp mô tả vấn đề và quan trọng hơn là xác minh rằng đây là một vấn đề thực tế chứ không phải (duy nhất) chỉ là bản thân tôi đang bối rối đó là vấn đề. Hy vọng nó có thể giúp những người khác dám xuống con đường nguy hiểm này :)