小编Gan*_*nye的帖子

Case Insensitive Flask-SQLAlchemy Query

我正在使用Flask-SQLAlchemy从用户数据库中进行查询; 然而,同时

user = models.User.query.filter_by(username="ganye").first()
Run Code Online (Sandbox Code Playgroud)

将返回

<User u'ganye'>
Run Code Online (Sandbox Code Playgroud)

user = models.User.query.filter_by(username="GANYE").first()
Run Code Online (Sandbox Code Playgroud)

回报

None
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法以不区分大小写的方式查询数据库,因此第二个示例仍将返回

<User u'ganye'>
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy

90
推荐指数
3
解决办法
4万
查看次数

AttributeError:'int'对象没有属性'_sa_instance_state'

我正在使用Flask在论坛模板上工作.当我尝试使用表单在浏览器中创建新线程时,SQLAlchemy会抛出AttributeError.当我尝试与Forum-to-Thread实现一对多的关系以及与Thread-to-User的一对多关系时,问题出现了.

models.py

class User(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  username = db.Column(db.String(32), index=True, unique=True)
  password = db.Column(db.String(32), index=True)
  email = db.Column(db.String(120), index=True, unique=True)
  role = db.Column(db.SmallInteger, default=ROLE_USER)

  posts = db.relationship('Post', backref='author', lazy='dynamic')

class Forum(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  title = db.Column(db.String(128))
  description = db.Column(db.Text)

  threads = db.relationship('Thread', backref='forum', lazy='dynamic')

class Thread(db.Model):

  id = db.Column(db.Integer, primary_key=True)
  title = db.Column(db.String(128))
  author= db.Column(db.String(32))
  timestamp = db.Column(db.DateTime)
  forum_id = db.Column(db.Integer, db.ForeignKey('forum.id'))

  posts = db.relationship('Post', backref='thread', lazy='dynamic')

class Post(db.Model):

  id = db.Column(db.Integer, primary_key=True)
  body = db.Column(db.Text) …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy one-to-many flask flask-sqlalchemy

44
推荐指数
1
解决办法
3万
查看次数

Flask-SQLAlchemy InvalidRequestError:对象已附加到会话

我正在使用Flask创建一个论坛项目,并使用Flask-SQLAlchemy管理所有用户,线程,帖子等.但是,我发现当我尝试执行x(例如编辑帖子)时,如果我尝试执行任何其他操作(例如删除帖子),我会收到InvalidRequestError.

要编辑帖子,

def post_edit(id, t_id, p_id):
  post = Post.query.filter_by(id=p_id).first()
  if post.author.username == g.user.username:
    form = PostForm(body=post.body)
    if form.validate_on_submit():
      post.body = form.body.data
      db.session.commit()
      return redirect(url_for('thread', id=id, t_id=t_id))
    return render_template('post_edit.html', form=form, title='Edit')
  else:
    flash('Access denied.')
    return redirect(url_for('thread', id=id, t_id=t_id))
Run Code Online (Sandbox Code Playgroud)

并删除帖子,

@app.route('/forum=<id>/thr=<t_id>/p=<p_id>/delete', methods=['GET','POST'])
def post_delete(id, t_id, p_id):
  post = Post.query.filter_by(id=p_id).first()
  if post.author.username == g.user.username:
    db.session.delete(post)
    db.session.commit()
    return redirect(url_for('thread', id=id, t_id=t_id))
  else:
    flash('Access denied.')
    return redirect(url_for('thread', id=id, t_id=t_id))
Run Code Online (Sandbox Code Playgroud)

并张贴帖子

@app.route('/forum/id=<id>/thr=<t_id>', methods=['GET','POST'])
def thread(id, t_id):
  forum = Forum.query.filter_by(id=id).first()
  thread = Thread.query.filter_by(id=t_id).first()
  posts = Post.query.filter_by(thread=thread).all()
  form …
Run Code Online (Sandbox Code Playgroud)

flask flask-sqlalchemy

5
推荐指数
1
解决办法
3632
查看次数