开发者学堂课程【Python Web 框架 Flask 快速入门:数据库的基本操作3-简单查询】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/603/detail/8799
数据库的基本操作3-简单查询
目录:
一、查询操作基本概念
二、查询操作示例
一、查询操作基本概念
1.1常用的 SQLAlchemy 查询过滤器
filter() 把过滤器添加到原查询上,返回一个新查询
filter_by() 把等值过滤器添加到原查询上,返回一个新查询
limit 使用指定的值限定原查询返回的结果
offset() 偏移原查询返回的结果,返回一个新查询
order_by() 根据指定条件对原查询结果进行排序,返回一个新查询
group_by() 根据指定条件对原查询结果进行分组,返回一个新查询
1.2常用的 SQLAlchemy 查询执行器
all() 以列表形式返回查询的所有结果
first() 返回查询的第一个结果,如果未查到,返回 None
first_or_404() 返回查询的第一个结果,如果未查到,返回404
get() 返回指定主键对应的行,如不存在,返回 None
get_or_404() 返回指定主键对应的行,如不存在,返回404
count() 返回查询结果的数量
二、示例
2.1插入角色数据
ro1=Role(name='admin')
db.session.add(ro1)
db.session.commit()
#再次插入一条数据
ro2=Role(name='user')
db.session.add(ro2)
db.session.commit()
2.2次插入多条数据
us1=User(name='wang',email='wang@163.com',password='
123456',role_id=ro1.id)
us2=User(name='zhang',email='zhang@189.com',password=
'201512',role_id=ro2.id)
us3=User(name='chen',email='chen@126.com',password='
987654',role_id=ro2.id)
us4=User(name='zhou',email='
zhou@163.com',password='456789’,role_id=ro1.id)
us5=User(name='tang',email='
tang@itheima.com',password='158104’,role_id=ro2.id)
us6=User(name='wu',email='‘wu@gmail.com',password='
5623514',role_id=ro2.id)
us7=User(name='qian',email='qian@gmail.
com',password='1543567',role_id=ro1.id)
us8=User(name='liu',email='liu@itheima.com',password=
‘867322',role_id=ro1.id)
us9=User(name='li',email='li@163.com',password=
'4526342',role_id=ro2.id)
us10=User(name='sun',email=‘sun@163.com,
password='235523’,role_id=ro2.id)
db.session.add.all([us1,us2,us3,us4,us5,us6,us7,us8,
us9,us10])
db.session.commit()
在Flask_SQLalchemy_demo.py对话框建立数据表:
@app.route("/')
defindex():
return'Helloflask!,
if_name__==._main__':
#删除表
db.drop_all()
#创建表工
db.create_all()#后边录入上述2.1的角色数据
ro1=Role(name='admin')
db.session.add(ro1)
db.session.commit()
#再次插入一条数据
ro2=Role(name='user')
db.session.add(ro2)
db.session.commit()
#后边录入上述2.2的多条数据
us1=User(name='wang',email='wang@163.com',password=
'123456',role_id=ro1.id)
us2=User(name='zhang',email='zhang@189.
com',password='201512',role_id=ro2.id)
us3=User(name='chen',email='chen@126.com',password=
'987654',role_id=ro2.id)
us4=User(name='zhou',email='
zhou@163.com',password='456789’,role_id=ro1.id)
us5=User(name='tang',email='
tang@itheima.com',password='158104’,role_id=ro2.id)
us6=User(name='wu',email='‘wu@gmail.com',password=
'5623514',role_id=ro2.id)
us7=User(name='qian',email='qian@gmail.
com',password='1543567',role_id=ro1.id)
us8=User(name='liu',email='liu@itheima.com
',password=‘867322',role_id=ro1.id)
us9=User(name='li',email='li@163.com',password=
'4526342',role_id=ro2.id)
us10=User(name='sun',email=‘sun@163.com,
password='235523’,role_id=ro2.id)
db.session.add.all([us1,us2,us3,us4,us5,us6,us7,
us8,us9,us10])
db.session.commit()
app.run(debug=true)
数据表程序建好。在运行对话框里运行程序:
/Users/Andy/.virtualenvs/flask_py/bin/python2/Users/
Andy/Desktop/Codes/Flask.SQLalchemydemo/Flask.SQLalchemy.
demo.py
*Runningonhttp://127.0.0.1:5000/(PressCTRL+Ctoquit)
Restartingwithstat
*Debuggerisactive!
DebuggerPIN:143-294-403
在这一步,准备数据工作完成。
2.3查询演练
完成以下查询
(1).查询所有用户数据
(2).查询有多少个用户
(3).查询第1个用户
(4).查询 id 为4的用户[3种方式]
演练操作
(1).查询所有用户数据。(该查询没有过滤器,直接用执行器all()
查询
#all() 返回查询到的所有对象
User.query.all()
演示:在 Terminal 运行对话框:输入 ipython 回车。
输入执行器条件:
In[1]:fromFlask_SQLalchemy_demoimport*
In[2]:User.query.a1l()
通过以上执行,第一个查询条件完成。
(2).查询有多少个用户(查询个数,用执行器 count() 查询)
User.query.count()
接(1)演示,继续输入:In[3]:User.query.count()
回车结果:
即有10个用户。
(3).查询第1个用户(查询第一个用户结果,用执行器 first() 查
询)
User.query.first()
接(2)演示,继续输入:In[4]:User.query.count()
回车结果。
结果对应数据表 Us1 的邮箱数据。
(4)、查询 id 为4的用户[3种方式]
#filter_by 直接用属性名,比较用=。filter 用类名。属性名,
比较用==
#filter_by 用于查询简单的列名,不支持比较运算符
#filter 比 filter_by 的功能更强大,支持比较运算符,支持
or 、in 等语法。
方式①:User.query.get(4)
方式②:User.query.filter_by(id=4).first()#属性=
方式③:User.query.filter(User.id==4).first()#对象
名,属性==
方式④:User.query.filter._by(id=4).first()#属性=
接(3)演示,继续输入上几种方式,回车结果。
这就是三种不同方式查询id为4的用户数据。
这里可以发现,filter 和 filter_by 的使用很相似,但有区别,
如下:
filter_by:属性=
filter:对象.属性=
filter 功能更强大,可以实现更多的一些查询,支持比较运算
符