我正在尝试在现有数据库上使用基本FactoryBoy
模型实现SQLAlchemy
。下面是我的设置的粗略近似值,以及呈现的错误。
Model.py
base = declarative_base()
class Person(Base):
person_id = Column(Integer, autoincrement=True, primary_key=True)
group_id = Column(ForeignKey(Group.group_id))
class Group(Base)
group_id = Column(Integer, autoincrement=True, primary_key=True)
Factory.py
class PersonFactory(SQLAlchemyModelFactory):
group_id = factory.SubFactory(GroupFactory)
class GroupFactory(SQLAlchemyModelFactory):
pass
test.py
PersonFactory.create()
错误:
sqlalchemy.exc.ProgrammingError:(psycopg2.ProgrammingError)无法调整类型'Group'[SQL:'INSERT INTO Person(group_id)VALUES(%(group_id)s,')] [参数:{'group_id' :}]
如何使用declarative_base()
和外键关系正确设置模型,以便FactoryBoy
的{{1}}能够正确填充依赖模型?
答案 0 :(得分:1)
正如您已经注意到的那样,不是将Group
实例分配给外键列属性,而是创建工厂填充的relationship()
属性:
class Person(Base):
person_id = Column(Integer, autoincrement=True, primary_key=True)
group_id = Column(ForeignKey(Group.group_id))
group = relationship(Group)
...
class PersonFactory(SQLAlchemyModelFactory):
group = factory.SubFactory(GroupFactory)
当SQLAlchemy将对象刷新到数据库时,SQLAlchemy将正确处理设置外键。