数据库的基本操作3-简单查询 | 学习笔记

简介: 快速学习数据库的基本操作3-简单查询

开发者学堂课程【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  功能更强大,可以实现更多的一些查询,支持比较运算

相关文章
|
6月前
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
651 12
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
8月前
|
Cloud Native 关系型数据库 分布式数据库
|
8月前
|
并行计算 关系型数据库 MySQL
如何用 esProc 将数据库表转储提速查询
当数据库查询因数据量大或繁忙变慢时,可借助 esProc 将数据导出为文件进行计算,大幅提升性能。以 MySQL 的 3000 万行订单数据为例,两个典型查询分别耗时 17.69s 和 63.22s。使用 esProc 转储为二进制行存文件 (btx) 或列存文件 (ctx),结合游标过滤与并行计算,性能显著提升。例如,ctx 并行计算将原查询时间缩短至 0.566s,TopN 运算提速达 30 倍。esProc 的简洁语法和高效文件格式,特别适合历史数据的复杂分析场景。
|
9月前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
9月前
|
数据库 Python
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
|
9月前
|
数据库
【YashanDB知识库】数据库用户所拥有的权限查询
【YashanDB知识库】数据库用户所拥有的权限查询
|
9月前
|
存储 运维 监控
百万指标,秒级查询,零宕机——时序数据库 TDengine 在 AIOps 中的硬核实战
本篇文章详细讲述了七云团队在运维平台中如何利用 TDengine 解决海量时序数据存储与查询的实际业务需求。内容涵盖了从数据库选型、方案落地到业务挑战及解决办法的完整过程,特别是分享了升级 TDengine 3.x 时的实战经验,给到有需要的小伙伴参考阅读。
336 1
|
9月前
|
缓存 NoSQL 关系型数据库
WordPress数据库查询缓存插件
这款插件通过将MySQL查询结果缓存至文件、Redis或Memcached,加速页面加载。它专为未登录用户优化,支持跨页面缓存,不影响其他功能,且可与其他缓存插件兼容。相比传统页面缓存,它仅缓存数据库查询结果,保留动态功能如阅读量更新。提供三种缓存方式选择,有效提升网站性能。
171 1
|
9月前
|
数据库
【YashanDB数据库】yasboot查询数据库状态时显示数据库状态为off
yasboot查询数据库状态时显示数据库状态为off

热门文章

最新文章