Flask sqlalchemy - 错误绑定参数0

时间:2014-05-26 01:40:48

标签: python sqlalchemy flask-sqlalchemy

我正在学习开发带有烧瓶的网络应用程序,但现在我使用flask-sqlalchemy来解决这个错误:

Original exception was: (InterfaceError) Error binding parameter 0 - probably unsupported type. 
u'INSERT INTO standards (std_insumo_id, std_name_id, cantidad, viviendas) VALUES (?, ?, ?, ?)' (...)",))

这些是我的模特

class Insumo(db.Model):
    __tablename__ = 'insumos'
    codigo = db.Column(db.Integer, primary_key=True)
    descripcion = db.Column(db.String(64), unique=True)
    um = db.Column(db.String(64))


class StandardName(db.Model):
    __tablename__ = 'std_names'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    standards = db.relationship('Standard', backref='std_name')


class Standard(db.Model):
    __tablename__ = 'standards'
    id = db.Column(db.Integer, primary_key=True)
    std_insumo_id = db.Column(db.Integer, db.ForeignKey('insumos.codigo'))
    std_name_id = db.Column(db.Integer, db.ForeignKey('std_names.id'))
    cantidad = db.Column(db.Float)
    viviendas = db.Column(db.Integer)

这就是我在尝试插入行时所做的事情:

cemento = Insumo.query.filter_by(descripcion="Cemento").first()
mamp = StandardName.query.filter_by(name="Mamposteria").first()

这两个已经存在于db中,所以没有问题。当我尝试使用模型时会出现问题:标准

r1 = Standard(std_insumo_id=cemento, std_name_id=mamp, cantidad=10, viviendas=40)
db.session.add(r1)
db.session.commit()
你可以帮我理解发生了什么吗?我没有看到这些类型有什么问题。

1 个答案:

答案 0 :(得分:2)

这里:

r1 = Standard(std_insumo_id=cemento, ...)
#             ^^^^^^^^^^^^^^^^^^^^^
根据此处的声明,

Standard期待std_insumo_id的值,该值应为int

std_insumo_id = db.Column(db.Integer, db.ForeignKey('insumos.codigo'))

但你有

cemento = Insumo.query.filter_by(descripcion="Cemento").first()

因此cementoInsumo实例,而不是int。您可以执行这些操作,但除了列级别映射之外,还需要提供类级别映射,并使用relationship()

class Standard(db.Model):
    std_insumo_id = db.Column(db.Integer, db.ForeignKey('insumos.codigo'))
    std_insumo = relationship(Insumo)

然后

r1 = Standard(std_insumo=cemento, ...)
^             ^^^^^^^^^^

没有“_id