factory_boy
和SQLAlchemy
存在一些问题,特别是在具有外键关系的模型方面。
我有以下两种模型:
models.py
class Order(db.Model):
__tablename__ = 'order'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(100), nullable=False)
def __init__(self, name):
self.name = name
class OrderItem(db.Model):
__tablename__ = 'order_item'
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(100), nullable=False)
order_id = db.Column(db.Integer(), db.ForeignKey('order.id'), nullable=False)
def __init__(self, name, order_id):
self.name = name
self.order_id = order_id
这些模型已映射到工厂:
factories.py
class OrderFactory(BaseFactory):
class Meta:
model = Order
name = factory.fuzzy.FuzzyText()
class OrderItemFactory(BaseFactory):
class Meta:
model = OrderItem
order_id = factory.SubFactory(OrderFactory)
name = factory.fuzzy.FuzzyText()
我一直遇到的问题是尝试将OrderItem
工厂写入数据库时。
testmodels.py
class TestModels(unittest.TestCase):
def setUp(self):
self.app = create_app(config_name='test')
self.context = self.app.app_context()
self.context.push()
db.create_all()
Session.configure(bind=db.engine)
self.session = Session()
factories.OrderItemFactory()
self.session.commit()
这持续抛出错误:
InterfaceError: (sqlite3.InterfaceError) Error binding parameter 0 - probably unsupported type. [SQL: u'INSERT INTO order_item (order_id, name) VALUES (?, ?)'] [parameters: (<Order (transient 4383715600)>, u'dpAPssFWksSp')] (Background on this error at: http://sqlalche.me/e/rvf5)
我可以清楚地看到基础插入语句正在尝试将Order
模型实例(<Order (transient 4383715600)>
)用作order_id
,但是从文档来看,我无法解决问题如何解决这个问题。
任何指针都很棒。
我觉得这与在模型中设置另一个关系有关。
谢谢