【问题标题】:sqlalchemy.exc.InterfaceError: <unprintable InterfaceError object>sqlalchemy.exc.InterfaceError: <unprintable InterfaceError object>
【发布时间】:2015-07-05 11:46:08
【问题描述】:

我正在试用 Flask,但在提交 wtforms 时出现错误 sqlalchemy.exc.InterfaceError: &lt;unprintable InterfaceError object&gt;。模型类是:

 class Post(db.Model):
__tablename__ = 'blog_posts'
id = db.Column(db.Integer, unique=True, primary_key=True)
title = db.Column(db.String(50), unique=False)
content = db.Column(db.Text, unique=False)
user_id = db.Column(db.String, db.ForeignKey('users.username'))



@staticmethod
def post_new_entry(title, content, user_id):
    """ Post new entry to database """
    new_post = Post(title=title, content=content, user_id=user_id)
    db.session.add(new_post)
    db.session.commit()
    return new_post

def __repr__(self):
    return 'PostID {}: {} by {}'.format(self.id, self.title, self.user_id)

对于我的表单,我有以下内容:

class PostForm(Form):
title = StringField('Title', validators=[DataRequired(), Length(10, 65)])
post_content = TextAreaField('Content', validators=[DataRequired(), Length(50, 500)])
submit = SubmitField('Publish Post')

路线是:

@main.route('/new_post/', methods=['GET', 'POST'])
@login_required
def add_post():
    form = PostForm()
    if form.validate_on_submit():
        Post.post_new_entry(title=form.title.data,
                            content=form.post_content.data,
                            user_id=current_user)
        flash("Amazing stuff! Thanks for your submission.")
        return redirect(url_for('main.index'))
    return render_template('single.html', form=form)

在我的 html 中,我正在导入 flask-bootstrap 的 wtf.html 页面:

{{ wtf.quick_form(form) }} 

表单显示正确,但在提交表单时出现上述错误。任何关于如何进行的提示或想法都会有所帮助。

【问题讨论】:

  • 不幸的是。无法在上面花费足够的时间。
  • 你用的是哪个 SQL 引擎?

标签: python flask flask-sqlalchemy wtforms flask-wtforms


【解决方案1】:

在您的表类定义中,您需要再添加一行来完成外键关系。

class Post(db.Model):
    __tablename__ = 'blog_posts'
    id = db.Column(db.Integer, unique=True, primary_key=True)
    title = db.Column(db.String(50), unique=False)
    content = db.Column(db.Text, unique=False)
    user_id = db.Column(db.String, db.ForeignKey('users.username'))

    # Setup the relationship to the User table
    users = db.relationship(User)

我在某个应用程序中出现了相同的错误消息,该应用程序前一天可以运行,但第二天就不行了。让我发疯,解决方案是我在某处删除了一个关系()。

【讨论】:

  • 你用的是哪个 SQL 引擎?
【解决方案2】:

def add_post() 下写user_id=current_user,但这是不对的。

既然你为class Post定义了:

user_id = db.Column(db.String, db.ForeignKey('users.username'))

def add_post() 中你应该使用user_id=current_user.username

【讨论】:

    【解决方案3】:

    在将数据从我的应用程序写入数据库时​​,我收到了类似的消息。这是因为从应用程序写入的数据需要具有与数据库中定义的格式相同的格式,例如db.Column(db.String()) 数据类型不能将列表作为输入,或者任何其他form.data。在这些情况下,您需要使用 ``str()``` 来防止此错误。

    【讨论】:

      【解决方案4】:

      我认为您的问题来自这个领域: Post.post_new_entry(title=form.title.data, content=form.post_content.data, user_id=current_user) 尝试具体并这样做: Post.post_new_entry(title=form.title.data, content=form.post_content.data, user_id=current_user.id)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-27
        • 2014-09-04
        • 2021-07-31
        • 2012-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多