11.Flask-SQLAlchemy-數據庫基本操作-數據操作-增刪改


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"

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM