新增
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'))