數據的查詢
all():查詢全部的數據,其結果是一個列表,每一個元素都是一個對象 students = Student.query.all() 過濾查詢: 第一種:filter,結果是baseQuery objects, 過濾條件的格式:對象.屬性==值 studnets = Student.query.filter(Student.id==1) 第二種:filter_by,結果是baseQuery objects,可以進行遍歷 students = Student.query.filter_by(id=1) 第三種:原生sql查詢id=1的信息,結果是一個可以遍歷的對象 sql = 'select * from student where id=1;' students = db.session.execute(sql) 模糊查詢: 語法:filter(模型名.屬性.運算符('xx')) 運算符: contains:包含 startswith:以什么開始 endswith:以什么結束 in_:在范圍內 like:模糊 __gt__: 大於 __ge__:大於等於 __lt__:小於 __le__:小於等於 例子: # 模糊查詢,查詢姓名中包含小花的學生信息 # django中filter(s_name__contains='小花') students = Student.query.filter(Student.s_name.contains('小花')) # 以什么開始 students = Student.query.filter(Student.s_name.startswith('小')) # 以什么結束 students = Student.query.filter(Student.s_name.endswith('1')) # 查詢年齡大於等於16的學生信息 students = Student.query.filter(Student.s_age.__gt__(15)) # 查詢id在10到20之間的學生的學生信息 students = Student.query.filter(Student.s_age.in_([10,11,12])) # 查詢年齡小於17的學生信息 Student.query.filter(Student.s_age < 17) students = Student.query.filter(Student.s_age.__lt__(17)) # 模糊查詢,使用like,查詢姓名中第二位為花的學生信息 # like '_花%',_代表必須有一個數據,%任何數據 students = Student.query.filter(Student.s_name.like('_花%')) 篩選: offset() # 跳過3個數據 stus = Student.query.offset(3) limit() # 跳過3個數據,查詢5個信息 stus = Student.query.offset(3).limit(5) order_by() # 按照id降序,升序 students = Student.query.order_by('id') students = Student.query.order_by('-id') students = Student.query.order_by(desc('id')) students = Student.query.order_by(asc('id')) students = Student.query.order_by('id desc') students = Student.query.order_by('id asc') get() #使用get,獲取id=1的學生對象,get()默認接收id # 拿不到值不會報錯,返回空 students = Student.query.get(4) first() # 獲取年齡最大的一個 stus = Student.query.order_by('-s_age').first() 邏輯運算 與 and_ filter(and_(條件),條件…) 或 or_ filter(or_(條件),條件…) 非 not_ filter(not_(條件),條件…) 例子: and_ students = Student.query.filter(Student.s_age==16, Student.s_name.contains('花')) students = Student.query.filter(and_(Student.s_age==16, Student.s_name.contains('花'))) not_ students = Student.query.filter(or_(Student.s_age==16, Student.s_name.contains('花'))) or_ students = Student.query.filter(not_(Student.s_age==16), Student.s_name.contains('花')) 注意: 1. fliter和filter_by的結果可遍歷 2. 可以通過對其結果使用all()方法將其轉換成一個列表或者first()轉換成objects對象。 3. all()獲得的是列表,列表沒有first()方法 4. fliter和filter_by有flrst()方法,沒有last方法
數據的添加
在flask中修改數據后需要添加事務和提交事務
事務: 完整,一致,持久,原子
第一種:保存數據
將數據放入緩存
db.session.add(stu)
將緩存中的數據提交
db.session.commit()
在學生表中添加數據
@blue.route('/createstu/') def create_stu(): s = Student() s.s_name = '小花' s.s_age = 19 db.session.add(s) db.session.commit() return '添加成功' 提交事務,使用commit提交我們的添加數據的操作
批量創建數據
批量添加數據時可以使用add()、add_list()添加事務
add():
db.session.add_all(stu)
db.session.commit()
stu是一個對象
add_list():
db.session.add_all(stus_list)
db.session.commit()
stus_list是一個列表,其每個元素都是一個對象
第一種
@app_blue.route('create_many_stu/',methods=['GET']) def create_many_stu(): if request.method == 'GET': stu = Student() stus_list = [] for i in range(5): stu = Student() stu.s_name = '小花%s' % random.randrange(10, 1000) stu.s_age = random.randint(10,20) stus_list.append(stu) db.session.add_all(stus_list) db.session.commit() # db.session.add(stu) # db.session.commit return '批量創建' db.session.add_all(stus_list) db.session.commit() 將列表中的數據統一添加到緩存區中,並提交
第二種
第二種:重寫init models中: def __init__(self, name, age): # 2,給對象賦值 self.s_name = name self.s_age = age views中: @app_blue.route('create_many_stu_init/',methods=['GET']) def create_many_stu(): if request.method == 'GET': stus_list = [] for i in range(5): stu = Student('小花%s' % random.randrange(10,1000), random.randint(10,20)) stus_list.append(stu) db.session.add_all(stus_list) db.session.commit() # db.session.add(stu) # db.session.commit return '批量創建成功'
修改數據
思路:獲取到需要修改的對象,通過對象.屬性的方式將屬性重新賦值,然后使用commit提交事務
寫法1
students = Student.query.filter_by(s_id=3).first() students.s_name = '哈哈' db.session.commit()
寫法2
Student.query.filter_by(s_id=3).update({'s_name':'娃哈哈'})
db.session.commit()
刪除數據
格式:db.session.delete(對象)
db.session.commit()
注意:在修改數據(增刪改)中如果使用commit()的話,只會修改本地緩存中的數據,數據庫中的數據不會更新。
必須使用:db.session.commit()
寫法1
students = Student.query.filter_by(s_id=2).first()
db.session.delete(students)
db.session.commit()
寫法2
students = Student.query.filter_by(s_id=1).all() db.session.delete(students[0]) db.session.commit()
模型 和Django的區別: a. 模型中不定義數據庫的表名: 在django中默認表名為:'應用appming_模型名小寫' 在flask中默認的表名為:模型名的小寫 b. 主鍵自增字段: django中會默認創建自增的主鍵id flask中需要手動創建自增的id: id = db.Column(db.Integer, primary_key=True, autoincrement=True) c.查詢所有數據的結果all() 在django結果中查詢的結果是QuerySet 在flask中查詢結果是List d.查詢滿足條件的數據的結果,filter() 在django查詢結果是QuerySet 在flask中查詢結果是baseQuery objects
喜歡這篇文章?歡迎打賞~~

