首页 > 技术文章 > flask-curd

shiyujie 2020-11-09 16:21 原文

新增

  from db_demo import app,db,User
  user = User(mobile=‘13112345678‘,name= ‘小红‘)
  db.session.add(user)#这个session是临时保存上传数据用的
  db.session.commit()

也可以批量添加

  db.session.add_all([user1,user2,user3])
  db.session.commit()

删除

  # 第一种
  user = User.query.order_by(User.id.desc()).first()
  db.session.delete(user)
  db.session.commit()
  
  # 第二种
  User.query.filter(User.mobile=‘18512345678‘).delete()
  db.session.commit()

修改

  # 第一种
  user = User.query.get(1)
  user.name = ‘Python‘
  db.session.add(user)
  db.session.commit()

  # 第二种
  User.query.filter_by(id=1).update({‘name‘:‘python‘})
  db.session.commit()

查询

  User.query.all()#查询所有 返回列表
  User.query.first() #查询第一个   返回对象
  User.query.get(2) #根据主键id获取对象 如果没有则返回None

原生SQLAlchemy查询语句

  db.session.query(User).all()
  db.session.query(User).first()
  db.session.query(User).get(2)

图书管理系统(例)

书籍列表分页展示及模糊查询

  # 后端
  @book.route('/list',methods=['POST','GET'])
  def list():
      if request.method == 'GET':
          paginate = Books.query.paginate(1,3)
          page = int(request.args.get('page',1))
          if page < 0:
              page = 1
          if page >= paginate.pages:   # 判断是否大于总页数
             page = paginate.pages
          paginate = Books.query.paginate(page,3)  # paginate是pagination类的对象

          books = paginate.items   # 当前页数据
          return render_template('/books.html',books=books,paginate=paginate)
      else:
          print('模糊查询')
          name = request.form.get('name')   # 根据书名查找
          paginate = Books.query.filter(Books.name.like('%'+name+'%')).paginate(1,3)
          books = paginate.items  # 当前页数据
          return      render_template('/books.html',books=books,paginate=paginate,name=name)

  # 前端页面
  <h1>书籍列表</h1>

<form action="/book/list" method="post">
    <input type="hidden" name="csrf_token" value="{{ csrf_token() }}">

    <input type="text" placeholder="书名" autocomplete="off" name="name" value="{{name}}"/>

    <input type="submit" value="查询">


</form>


  <ul class="pg">
{% if paginate.has_prev %}
    <li><a href="/book/list?page={{paginate.prev_num}}">上一页</a></li>
{% endif %}
{%for i in paginate.iter_pages()%}
    {%if paginate.page == i %}
        <li><a href="/book/list?page={{i}}" class="current">{{i}}</a></li>
    {%else%}
        <li><a href="/book/list?page={{i}}">{{i}}</a></li>
    {%endif%}
{%endfor%}
{% if paginate.has_next%}
    <li><a href="/book/list?page={{paginate.next_num}}">下一页</a></li>
{%endif %}

增加图书

  @book.route('/add_book',methods=['GET','POST'])
  def add_book():
      if request.method == 'GET':
           return render_template('/add_book.html')
      else:
          name = request.form.get('name')
          author_id = request.form.get('author_id')
          book = Books(name=name,author_id=author_id)
          db.session.add(book)
          db.session.commit()
          return redirect(url_for('book.list'))

删除

  @book.route('/del_book/<int:id>')
  def del_book(id):
      book = Books.query.get(id)
      db.session.delete(book)
      db.session.commit()
      return redirect(url_for('book.list'))

修改

  @book.route('/update/<int:id>',methods=['GET','POST'])
  def update(id):
      if request.method == 'GET':
          book = Books.query.get(id)
          return render_template('/update.html',book=book)
      else:
          books = Books.query.get(id)
          new_name = request.form.get('name')
          books.name = new_name
          db.session.commit()
      return redirect(url_for('book.list'))

推荐阅读