简单的 SQLAlchemy 子工厂示例
Simple SQLAlchemy SubFactory example
我正在尝试在现有数据库上使用基本 SQLAlchemy
模型实施 FactoryBoy
。下面是我的设置的粗略近似值,以及呈现的错误。
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) can't adapt type 'Group' [SQL: 'INSERT INTO Person (group_id) VALUES (%(group_id)s,')] [parameters: {'group_id': }]
如何使用 declarative_base()
和外键关系正确设置模型,以便 FactoryBoy
的 SubFactory
正确填充相关模型?
而不是将 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
模型实施 FactoryBoy
。下面是我的设置的粗略近似值,以及呈现的错误。
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) can't adapt type 'Group' [SQL: 'INSERT INTO Person (group_id) VALUES (%(group_id)s,')] [parameters: {'group_id': }]
如何使用 declarative_base()
和外键关系正确设置模型,以便 FactoryBoy
的 SubFactory
正确填充相关模型?
而不是将 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 将对象刷新到数据库时,它会正确地设置外键。