SQLAlchemy数据操作(增删改)
插入数据
一次插入一条数据:
# 插入一条数据
@app.route('/insert')
def insert():
student = Student(name="小明", age=17, email="xiaoming@qq.com", money=100) # 实例化模型对象
db.session.add(student) # 把模型对象添加数据库session会话对象中。db.session是SQLAlchemy中内置的会话管理对象sessionSM的成员
db.session.commit() # 提交会话
return 'ok'
一次插入多条数据:
方法一:
# 1. 先实例化要创建的模型对象 student = Student(name="小红", age=17, email="xiaohong@qq.com", money=200) # 2. 把实例对象添加到连接会话 db.session.add(student) # 1. 先实例化要创建的模型对象 student = Student(name="小花", age=16, email="xiaohua@qq.com", money=200) # 2. 把实例对象添加到连接会话 db.session.add(student) # 3. 只需要在结束的时候提交事务即可 db.session.commit()
方法二:
# 1. 先创建的列表要添加的实例化模型对象列表
student_list = [
Student(name='wang', email='wang@163.com', age=20),
Student(name='zhang', email='zhang@189.com', age=21),
Student(name='chen', email='chen@126.com', age=19),
Student(name='zhou', email='zhou@163.com', age=18),
Student(name='tang', email='tang@163.com', age=16),
Student(name='wu', email='wu@gmail.com', age=20),
Student(name='qian', email='qian@gmail.com', age=21),
Student(name='liu', email='liu@163.com', age=21),
Student(name='li', email='li@163.com', age=18),
Student(name='sun', email='sun@163.com', age=17),
]
# 2. 一次性添加到连接会话中
db.session.add_all(student_list)
db.session.commit()
删除数据
方法一:
先查后删
# 先查询出来 student = Student.query.first() print(student) # 再进行删除 db.session.delete(student) db.session.commit()
方法二:
数据改动时添加条件并判断条件成立以后才进行数据操作(类似乐观锁)
Student.query.filter(Student.id == 5).delete() db.session.commit()
乐观锁、悲观锁介绍参考连接:https://www.cnblogs.com/LoveMoney-MrLi/p/15754181.html
修改数据
根据条件跟新一条数据:
@app.route("/update")
def update():
"""更新一条"""
# 先查询出来
student = Student.query.filter(Student.id == 4).first()
student.name = "小白"
db.session.commit()
return "ok"
根据条件跟新多条数据:
@app.route("/update2")
def update2():
"""直接根据条件更新一条或多条数据"""
Student.query.filter(Student.name == 'zhang', Student.money == -99.00).update({'money': 1998})
db.session.commit()
return "ok"
实现类似django里面F函数的效果:
@app.route("/update3")
def update3():
# 字段引用[利用当前一条数据的字典值进行辅助操作,实现类似django里面F函数的效果]
# 每次自增100
Student.query.filter(Student.name == "小花").update({"money": Student.money + 100})
db.session.commit()
return "ok"
@app.route("/update4")
def update4():
# 字段引用[利用当前一条数据的字典值进行辅助操作,实现类似django里面F函数的效果]
# 在原有money的基础上按age补贴1000*age
Student.query.filter(Student.name == "zhang").update({"money": Student.money + 1000 * Student.age})
db.session.commit()
return "ok"
