from flask import Blueprint, render_template, request
from user.models import db, Student, Grade, Course
from sqlalchemy import and_, or_, not_
blue = Blueprint('app', __name__)
"""
@blue.route('/index/', methods=['GET'])
def index():
item1 = ['django', 'flask', 'tornado', 'vue', 'docker']
content_h2 = '<h2>我是h2標(biāo)簽</h2>'
return render_template('index.html', item1=item1, content_h2=content_h2)
"""
@blue.route('/index/', methods=['GET'])
def index():
return render_template('index.html')
@blue.route('/init_db/', methods=['GET'])
def init_db():
# 將模型映射成表 鹦肿, 只能使用一次
db.create_all()
# db.drop_all() #刪除所有
return '初始化數(shù)據(jù)庫成功'
@blue.route('/stu6/', methods=['POST', 'DELETE', 'PATCH', 'GET'])
def stu():
if request.method == 'GET':
# flsak中all()返回的是列表
# django中all() 返回的是queryset辅柴,all().first()
stus = Student.query.all()
print('查詢到所有的學(xué)生', stus)
stus = Student.query.first()
print('取第一個(gè)學(xué)生', stus)
stu = Student.query.filter(Student.s_name == '豬八戒').all()[0]
print('取名字是豬八戒的這個(gè)學(xué)生', stu)
stu = Student.query.filter(Student.s_name == '豬八戒').first()
print('取名字是豬八戒的這個(gè)學(xué)生', stu)
stu = Student.query.filter_by(s_name='豬八戒').first()
print('取名字是豬八戒的這個(gè)學(xué)生', stu)
# django中g(shù)et(s_name='xxx'):條件必須成立,通過條件返回內(nèi)容必須唯一涣旨。
# flask中g(shù)et(主鍵值):查詢主鍵所在行的數(shù)據(jù)對(duì)象股冗,如果不存在則返回None
stu = Student.query.get(3)
print('取主鍵為3的這個(gè)學(xué)生', stu)
# order_by 排序
# django中 Student.objects.all().order.by()
# stus = Student.query.order_by('-id') #老版本用這種方法
stus = Student.query.order_by(-Student.id).all()
print('學(xué)生按照id 倒序排序', stus)
# offset limit 分頁 從第第幾個(gè)開始取,跳過幾個(gè)開始拿值烹棉。
page = 2
start_page = (page - 1) * 2
stus = Student.query.offset(start_page).limit(2).all()
for stu in stus:
print(stu)
print('分頁對(duì)象分頁對(duì)象是一個(gè)列表', suts, type(stus))
# django : Paginator(所有的結(jié)果怯疤,條數(shù))p.page(頁碼)
# django: p.next_page_number p.previous_page_number
# flask : paginate
p = Student.query.paginate(page, 3)
print('-----------------------------------------------')
print('拿到分頁對(duì)象', p)
stus = p.items
# 上一頁,下一頁
# 是否有下一頁: p.has_next p.next_num
# 是否有上一頁: p.has_prev p.prev_num
print('從第一開始取3個(gè), 是否有上一頁辅髓,是否有下一頁', stus, p.has_prev, p.has_next)
# 包含 以什么開始 以什么結(jié)束 和什么一樣
# contains/ startswith/ endwith/ like
# django中:filter(s_name__contains='張三')
# contains like'%張三%' 包含的意思前后都已有字符,上邊兩句表達(dá)的都是同一個(gè)意思少梁。
stus = Student.query.filter(Student.s_name.contains('豬八戒')).all()
print(stus)
# startswith like'豬%' '張_'
stu = Student.query.filter(Student.s_name.startswith('豬%')).all()
print(stu)
stus = Student.query.filter(Student.s_name.like('豬%')).all() #%包含0個(gè)或者多個(gè)
print(stus)
stus = Student.query.filter(Student.s_name.like('豬_')).all() #只能查總共兩個(gè)字的
# gt( > ) ge( >= ) lt( < ) le( <= )
stus = Student.query.filter(Student.s_age > 18).all()
stus = Student.query.filter(Student.s_age.__gt__(18)).all()
print('年齡大于18的所有學(xué)生', stus)
#多條件查詢,與或非第焰,
# django中 fillter(Q(), Q()) fillter(Q()| Q()) fillter(~Q())
stus = Student.query.filter(Student.s_age >= 18).filter(Student.s_name.startswith('唐')).all()
print(stus)
stus = Student.query.filter(Student.s_age >=18, Student.s_name.startswith('唐')).all()
print('****************')
print(stus)
# 多條件或操作
stus = Student.query.filter(or_(Student.s_age >=18, Student.s_name.startswith('唐'))).all()
print(stus)
# 多條件 非 操作
# [^0-9a-z] ^括號(hào)內(nèi)表示取反 括號(hào)外表示開頭
stus = Student.query.filter(not_(Student.s_age >= 19)).all()
print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~')
print(stus)
# in notin
stus = Student.query.filter(Student.id.in_([3, 4, 6])).all()
print('在id346里邊的學(xué)生', stus)
print('1111111111111111111111111111111')
stus = Student.query.filter(Student.id.notin_([3, 4])).all()
print('不在3妨马、4的學(xué)生有 ', stus)
return '查詢數(shù)據(jù)成功'
if request.method == 'POST':
stu = Student()
stu.s_name = '小明'
# 事務(wù)session的add方法杀赢,其實(shí)是準(zhǔn)備插入語句湘纵,insert
# db.session.add(stu)
# #事務(wù)session提交了,數(shù)據(jù)才會(huì)插入到數(shù)據(jù)庫中
# db.session.commit()
stu.save()
return '插入單條數(shù)據(jù)成功'
if request.method == 'DELETE':
stu = Student.query.filter(Student.s_name == '小明').first()
# filter_by 刪除字段
stu = Student.query.filter_by(s_name='孫悟空').first()
# delete(接收刪除對(duì)象)
db.session.delete(stu)
db.session.commit()
return '刪除數(shù)據(jù)成功'
if request.method == 'PATCH':
stu = Student.query.filter(Student.s_name == '唐僧').first()
stu.s_age = 21
# 修改和創(chuàng)建可以調(diào)用db.session.add() 和commit()操作
# stu.save()
db.session.commit()
return '修改數(shù)據(jù)成功'
@blue.route('/stus/', methods=['GET'])
def suts():
names = ['孫悟空', '豬八戒', '唐僧', '沙和尚']
stus_list = []
for name in names:
stu = Student()
stu.s_name = name
# stu.save()也可以直接這么寫
stus_list.append(stu)
# add_all([添加對(duì)象1,添加對(duì)象3···])
db.session.add_all(stus_list)
db.session.commit()
return '批量插入數(shù)據(jù)成功'
@blue.route('/add_grade/', methods=['GET'])
def add_grade():
names = ['Python班', 'Java班', 'Php班', 'Html班', 'UI班']
for name in names:
g = Grade()
g.g_name = name
db.session.add(g)
db.session.commit()
return '添加班級(jí)信息成功'
@blue.route('/stu_grade/', methods=['GET'])
def stu_grade():
stus = Student.query.filter(Student.id.in_([1, 2, 3])).all()
grade = Grade.query.filter(Grade.g_name == 'Python班').first()
for stu in stus:
# 在django中:grade_id= models.Foreignkey(Grade)
# stu.grade_id = 班級(jí)對(duì)象
# stu.grade_id_id = 班級(jí)對(duì)象的主鍵id值
#在flask中:stu.grade_id =db.Column(ForeignKey('grade.id'))
stu.grade_id = grade.id
stu.save()
return '分配班級(jí)信息成功'
@blue.route('/sel_stu_by_grade/', methods=['GET'])
def sel_stu_by_grade():
grade = Grade.query.filter(Grade.g_name == 'Python班').first()
print('python班的id號(hào)', grade)
# 通過班級(jí)查看學(xué)生
stus = grade.stus
print('拿到這個(gè)班級(jí)有多少個(gè)學(xué)生 一對(duì)多的查詢 grade.stus', grade.stus)
# 通過學(xué)生信息查詢班級(jí)信息
print(stus[0].g, '通過 stus[0].g 的反查詢汇歹,查詢學(xué)生所在的班級(jí)')
stu = stus[0]
print(stu, '第一個(gè)學(xué)生')
stu_grade = stu.g
print(stu.g, '通過 stu.g 的反查詢偿凭,查詢學(xué)生所在的班級(jí)')
return '查詢班級(jí)信息成功'
@blue.route('/stu_course/', methods=['GET'])
def stu_course():
stus = Student.query.filter(Student.id.in_([1, 2, 3])).all()
cou = Course.query.filter(Course.c_name == 'JAVA').all()
print(stus)
print('stus是一個(gè)列表', stus[0])
print('拿到id在1,2,3中的學(xué)生', type(stus))
print('課程', cou)
for stu in stus:
# 獲取學(xué)生對(duì)應(yīng)的課程信息
print('stu.cou查看學(xué)生所選的課', stu.cou)
# 給學(xué)生添加課程
# stu.cou.append(cou)
# 刪除學(xué)生課程
# stu.cou.remove(cou)
for stu in stus:
# 課程添加學(xué)生 和上邊方法效果是一樣的
print(stu)
# cou.stus.append(stu)
# db.session.commit()
return '學(xué)生添加課程成功'
Flask 多對(duì)多視圖查詢 模糊查詢 分頁 增刪改查
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門扇谣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闲昭,“玉大人,你說我怎么就攤上這事鸯绿。” “怎么了瓶蝴?”我有些...
- 文/不壞的土叔 我叫張陵舷手,是天一觀的道長拧簸。 經(jīng)常有香客問我聚霜,道長珠叔,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任姥芥,我火速辦了婚禮汇鞭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘台囱。我一直安慰自己读整,他們只是感情好簿训,可當(dāng)我...
- 文/花漫 我一把揭開白布强品。 她就那樣靜靜地躺著屈糊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逻锐。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼苹丸,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼苇经!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扇单,我...
- 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎施流,沒想到半個(gè)月后鄙信,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡银受,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年慎王,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赖淤。...
- 正文 年R本政府宣布,位于F島的核電站舀寓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏必尼。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一判莉、第九天 我趴在偏房一處隱蔽的房頂上張望育谬。 院中可真熱鬧,春花似錦渗饮、人聲如沸但汞。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽踩叭。三九已至,卻和暖如春自脯,著一層夾襖步出監(jiān)牢的瞬間斤富,已是汗流浹背膏潮。 一陣腳步聲響...
- 正文 我出身青樓涩嚣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親航厚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 商品增刪改查之分頁顯示 首先需要?jiǎng)?chuàng)建一個(gè)javaBean 然后需要請(qǐng)求servlet用來處理 然后調(diào)用servic...
- 一.Springboot下JPA根據(jù)實(shí)體類自動(dòng)建表(Demo使用mysql數(shù)據(jù)庫杯活,alibaba線程池)1.Mav...
- 一 創(chuàng)建UserMapper接口 package com.yuyi.mapper; import java.ut...
- 在iOS中旁钧,主要有5種數(shù)據(jù)緩存的策略: 1吸重、plist 2歪今、歸檔 3、偏好設(shè)置 4寄猩、沙盒文件 5、"SQLite數(shù)...
- 張陽買來幾十本不同人寫的名人傳記和成功學(xué)教材车遂,每天讀到深夜斯辰,還將書上的成功經(jīng)驗(yàn)記成學(xué)習(xí)筆記,給自己規(guī)劃未來彬呻。 一 ...