InterfaceError:(sqlite3.InterfaceError)错误绑定参数0

时间:2018-10-24 12:26:23

标签: python sqlalchemy pytest factory-boy

factory_boySQLAlchemy存在一些问题,特别是在具有外键关系的模型方面。

我有以下两种模型:

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,但是从文档来看,我无法解决问题如何解决这个问题。

任何指针都很棒。

我觉得这与在模型中设置另一个关系有关。

谢谢

0 个答案:

没有答案