我正在尝试解决如何在多个文件中分散使用SQLAlchemy类的问题,但我无论如何都无法解决。我对SQLAlchemy还比较陌生,如果这个问题很基础,请原谅我。考虑在每个文件中有以下3个类:
以上代码会出现错误:
如何在这些文件之间共享声明性基础?
考虑到我可能会在此基础上添加像Pylons或Turbogears这样的东西,那么“正确”的完成方式是什么?
编辑于10-03-2011:
我在Pyramids框架中找到了这个描述,它描述了问题,更重要的是验证了这是一个实际的问题,而不仅仅是我困惑的问题。希望它能帮助其他敢于走这条危险路线的人 :)
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'
如何在这些文件之间共享声明性基础?
考虑到我可能会在此基础上添加像Pylons或Turbogears这样的东西,那么“正确”的完成方式是什么?
编辑于10-03-2011:
我在Pyramids框架中找到了这个描述,它描述了问题,更重要的是验证了这是一个实际的问题,而不仅仅是我困惑的问题。希望它能帮助其他敢于走这条危险路线的人 :)