数据库
首页 > 数据库> > python – flask admin:sqlalchemy.exc.InterfaceError(错误绑定参数8)

python – flask admin:sqlalchemy.exc.InterfaceError(错误绑定参数8)

作者:互联网

我试图使用下面的方法保存项目的审阅者,并且选择字段显示正确:

# Query the user with Role.id == 4 as reviewer
def reviewer_choices():
    return User.query.join(User.roles).filter(Role.id == 4)

# Build a select field
class ProjectView(sqla.ModelView):
 form_extra_fields = {
    'reviewer': sqla.fields.QuerySelectField(
    label='Reviewer',
    query_factory=reviewer_choices,
 )}

但是,当我尝试保存它时,发生了错误:

InterfaceError:(sqlite3.InterfaceError)错误绑定参数8 – 可能不支持的类型. [SQL:u’INSERT INTO项目(……评论者……)VALUES(…< __ main __.用户对象位于0x00000000048E89E8> …).

我注意到审阅者是一个对象,例如:< __ main __.用户对象位于0x00000000048E89E8>.那么评论者的正确数据类型是什么,所以我可以将其保存到数据库中?我目前用过:

在项目类中

class Project(db.Model):
   # ...
   reviewer = db.Column(db.Unicode(128)) 
   # ...

在项目表中

CREATE TABLE `project` (
   # ...
   `reviewer1`  TEXT,
   # ...

我也尝试定义__repr__和__str__但两个都没有用:

class User(db.Model, UserMixin):
   id = db.Column(db.Integer, primary_key=True)
   first_name = db.Column(db.String(255))
   # ...
   # ...
   def __repr__(self):
     return self.first_name

class User(db.Model, UserMixin):
   id = db.Column(db.Integer, primary_key=True)
   first_name = db.Column(db.String(255))
   # ...
   # ...
   def __str__(self):
     return self.first_name

解决方法:

很明显.审阅者是Project中定义的字符串.您可以在User模型中定义__repr__函数以返回字符串(用户名或其他名称).检查这个question.

标签:python,flask-sqlalchemy,flask-admin
来源: https://codeday.me/bug/20191003/1848603.html