【问题标题】:flask admin : sqlalchemy.exc.InterfaceError(Error binding parameter 8)烧瓶管理员:sqlalchemy.exc.InterfaceError(错误绑定参数8)
【发布时间】:2017-05-11 07:21:32
【问题描述】:

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

# 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) Error binding parameter 8 - probably unsupported type. [SQL: u'INSERT INTO project(...reviewer...)VALUES(...<__main__.User object at 0x00000000048E89E8>...).

我注意到审阅者是一个对象,类似于:<__main__.User object at 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

【问题讨论】:

    标签: python flask-sqlalchemy flask-admin


    【解决方案1】:

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

    【讨论】:

    • 谢谢,但还是不行,这次返回InterfaceError: <unprintable InterfaceError object>
    • 尝试在用户模型中定义__str__函数。
    • 是的,我使用的是__str__,然后切换到__repr__,但两者都不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 2015-09-17
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    相关资源
    最近更新 更多