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"