InterfaceError: (sqlite3.InterfaceError) Ошибка привязки параметра 0 - PullRequest
0 голосов
/ 24 октября 2018

Имеются некоторые проблемы с 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, но, глядя на документы, я не могу понять, как обойти это.

Любые указателибыло бы замечательно.

У меня такое ощущение, что это как-то связано с установлением других отношений в модели.

Спасибо

...