flask如何查询mysql_Flask操作数据库查询

本文详细介绍了如何在Flask应用中操作MySQL数据库,包括查询表中全部数据、单条记录、根据主键获取对象、原始查询方式、条件查询、排序、分组、关联查询以及数据的更新和删除等操作。
摘要由CSDN通过智能技术生成

查询表中全部

Role.query.all()

Out[2]: [, ]

In [3]: li =Role.query.all()

In [4]: li

Out[4]: [, ]

In [5]: r =li[0]

In [6]: type(r)

Out[6]: db_demo.Role

In [7]: r.name

Out[7]: u'admin'

-------------------查询单条

In [8]: Role.query.first()

Out[8]: In [9]: r =Role.query.first()

In [10]: r.name

Out[10]: u'admin'

--------------------

#根据主键id获取对象,get要传一个主键ID的值

In [11]: r = Role.query.get(2)

In [12]: r

Out[12]: In [13]: r.name

Out[13]: u'stuff'In [14]:-----------------------------------

#另一种查询方式,这是最原始的方法

In [15]: db.session.query(Role).all()

Out[15]: [, ]

In [16]: db.session.query(Role).get(2)

Out[16]: In [17]: db.session.query(Role).first()

Out[17]: In [18]:-------------------------------------

#按条件查询

In [18]: User.query.filter_by(name="wang")

Out[18]: In [19]: User.query.filter_by(name="wang").all()

Out[19]: []

In [20]: User.query.filter_by(name="wang").first()

Out[20]: In [21]: user = User.query.filter_by(name="wang").first()

In [22]: user.name

Out[22]: u'wang'In [23]: user.email

Out[23]: u'wang@163.com'

--------------------------------

#条件查询,“且”关系

In [24]: User.query.filter_by(name="wang", role_id=1).first()

Out[24]: In [25]: User.query.filter_by(name="wang", role_id=2).first()

In [26]: user = User.query.filter_by(name="wang", role_id=2).first()

In [27]: type(user)

Out[27]: NoneType

In [28]:--------------------------------------------

#filter_by是filter的特殊方法

In [28]: user = User.query.filter(User.name=="wang", User.role_id==1).first

...: ()

In [29]: user

Out[29]: In [30]: user.name

Out[30]: u'wang'

-----------------------------------------

#引入类这是"或"关系

In [31]: from sqlalchemy importor_

In [32]: User.query.filter(or_(User.name=="wang", User.email.endswith("163.com")

...: )).all()

Out[32]: [, ]

In [33]: li = User.query.filter(or_(User.name=="wang", User.email.endswith("163.

...: com"))).all()

In [34]: li[0].name

Out[34]: u'wang'In [35]: li[1].name

Out[35]: u'zhou'In [36]:--------------------------------------------

#offset偏移 跳过几条#User.query.offset().limit().order_by().all()

In [36]: User.query.offset(2).all()

Out[36]: [, ]

In [37]: li = User.query.offset(2).all()

In [38]: li[0].name

Out[38]: u'chen'In [39]: li[1].name

Out[39]: u'zhou'In [40]:-------------------------------

#后面必须跟上all()否则取不出来

In [42]: li = User.query.offset(1).limit(2).all()

In [43]: li

Out[43]: [, ]

In [44]: li[0].name

Out[44]: u'zhang'In [45]: li[1].name

Out[45]: u'chen'In [46]:-------------------------------

#排序

In [50]: User.query.order_by("-id").all()

Out[50]:

[,,,]

In [51]:#官方版本,降序desc(),升序asc()

In [51]: li =User.query.order_by(User.id.desc()).all()

In [52]: li

Out[52]:

[,,,]

In [53]: li[0].name

Out[53]: u'zhou'In [54]: li[3].name

Out[54]: u'wang'In [55]:----------------------

#分组查询,func里包含聚合方法

In [55]: from sqlalchemy importfunc

In [56]: db.session.query(User.role_id, func.count(User.role_id)).group_by(User.role_id)

Out[56]: In [57]: db.session.query(User.role_id, func.count(User.role_id)).group_by(User.role_id).all()

Out[57]: [(1L, 2L), (2L, 2L)]

In [58]:-------------------------

#关联查询,反向查询

In [61]: ro = Role.query.get(1)

In [62]: type(ro)

Out[62]: db_demo.Role

In [63]: ro.users

Out[63]: [, ]

In [64]: ro.users[0].name

Out[64]: u'wang'In [65]: ro.users[1].name

Out[65]: u'zhou'In [66]:--------------------------

#正向查询

In [67]: user

Out[67]: In [68]: user.role_id

Out[68]: 1LIn [69]: Role.query.get(user.role_id)

Out[69]:

#这里可以方便的查询user的role信息,backref值的神奇作用

In [70]: user.role

Out[70]: In [71]: user.role.name

Out[71]: u'admin'In [72]:-----------------------------

#更新#1.原始方法

In [9]: user = User.query.get(1)

In [10]: user.name

Out[10]: 'python'In [11]: user.name = 'itcast'In [12]: db.session.add(user)

In [13]: db.session.commit()-----------------------

#简便方法

In [14]: User.query.filter_by(name="zhou").update({"name": "python", "emai

...: l":"python@itast.cn"})

Out[14]: 1LIn [15]: db.session.commit()

In [16]:------------------------

#删除

In [16]: user = User.query.get(3)

In [17]: db.session.delete(user)

In [18]: db.session.commit()

In [19]:

回答: 在Python中,如果数据库密码中包含特殊字符,可以使用`urllib.parse.quote`方法对密码进行URL编码来解决连接失败的问题。具体做法是将数据库密码中的特殊字符进行编码,例如@符号可以编码为%40。123 #### 引用[.reference_title] - *1* [flask使用SQLAlchemy数据库连接密码带有特殊符号](https://blog.csdn.net/weixin_37591442/article/details/124842906)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* [〖Python 数据库开发实战 - MySQL篇㉓〗- 单行子查询与多行子查询语法规则](https://blog.csdn.net/weixin_42250835/article/details/126187536)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [python3 插入 mysql 时内容带有特殊字符处理](https://blog.csdn.net/shykevin/article/details/110257499)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值