python安装sqlalchemy python2_Python SQLAlchemy --2
本文為 Python SQLAlchemy ORM 一系列教學文:
接下來會更深入地探討查詢的使用。
查詢的基本使用法為 session.query(Mapped Class),其後可加 .group_by(), .order_by(), .delete 等方法。
只是要注意的是 query() 接受的參數為 Mapped Class (例如先前定義的 User 類別),而不是表格名稱。
例如在 範例 2 中是以 User 做為參數,而不是以 user 這個表格名稱做為參數。
如果查詢成功就會回傳 Query Object,若無則會回傳 None 。
首先,query() 可以使用 from_statement() 方法,直接以完整的 SQL 指令進行查詢,更可以搭配 params() 將變數代入 SQL 指令中。
例如:
1
2
3
rows = session.query(User).from_statement('SELECT * FROM user WHERE name=:name').params(name='user1')
for r in rows:
print(r.id)
其中,上述 SQL 指令中的 :name 代表會有一個參數名 name ,然後在 params(name='user1') 中就指明了 name 的值為 user1 。
基本上這樣就能夠進行大多數的查詢,但若希望能夠更深入地學會運用 SQLAlchemy 進行查詢,就可以閱讀以下的文章。
以下是幾個關於 query() 的使用範例(由於 User 類別已在先前已經定義過了,因此以下範例會直接省略)。
SELECT
範例的 SQL 指令 ─ SELECT * FROM user
1
2
3
for r in session.query(User):
print(type(r))
print(r.name, r.username, r.password)
執行結果如下:
1
2
[class main__.user]
1 user1 username1 3833b3a1c69cf71a31d86cb5bb4d3866789b4d1e
上述的範例程式碼,是列出每一列 SELECT 查詢出來的結果,可以注意到的是每一列的 r 都是一個 User 實例,因此我們就可以依照先前定義 User 類別的欄位屬性,將這些屬性列印出來。
SELECT user.name FROM user query() 也能針對個別欄位進行 SELECT ,只要將 Mapped Class 及其屬性做為參數即可,例如只想查詢全部的 username ,那麼 query() 的參數就會是 User.username 。
1
2
3
for r in session.query(User.username):
print(type(r))
print(r.username)
執行結果如下:
1
2
[class sqlalchemy.util._collections.keyedtuple]
username1
此處值得注意的是,當有只針對個別欄位 SELECT 的情況時,就是回傳 KeyedTuple 實例了,而不是我們先前的定義的 User 類別的實例。
WHERE
範例 SQL 指令 ─ SELECT * FROM user WHER id = 1
若要使用 WHERE 條件查詢,則是使用 filter_by() 或 filter() 方法。
兩者的差異在於 filter_by() 必須使用屬性名稱做為參數名稱,然後加上查詢條件。例如查詢 id 為 1 的資料為 filter_by(id=1)。\
而 filter() 則是以 Mapped Class 及其屬性加上查詢條件做為參數,而且支援 Python 運算子。例如同樣查詢 id 為 1 的資料為 filter(User.id == 1) 。
不過,SQLAlchemy 其實也有提供 filter() 以字串為參數的用法,例如查詢 id 為 1 也可以表示成為 filter(id=1) 。
此外,多個查詢條件可以用附加 .filter(…) 的形式達成。
1
2
3
4
5
6
for r in session.query(User.id).filter_by(id=1):
print(r.id)
# 多個查詢條件
for r in session.query(User.id).filter(User.id==1).filter(User.name=='user1'):
print(r.id)
更多的查詢條件可以看 Common Filter Operators ,如 LIKE, IN, NOT IN 等等。
ORDER BY
範例 SQL 指令 ─ SELECT user.id FROM user ORDER BY user.id DESC
排序可以使用 order_by() ,參數為 Mapped Class 及其屬性。例如想依照 id 欄位排序,那麼參數就會是 User.id 。此外, 預設的排序為遞增排序 。
遞減排序的部份則要記得 import desc 模組:
1
from sqlalchemy import desc
以下範例示範遞增及遞減排序:
1
2
3
4
5
6
7
8
9
# 遞減
for r in session.query(User.id).order_by(User.id.desc()):
print(type(r))
print(r.id))
# 遞增
for r in session.query(User.id).order_by(User.id.asc()):
print(type(r))
print(r.id)
LIMIT
有時會需要使用 LIMIT 來限制查詢的範圍,例如分頁功能,最直接的方法就是用 Python slice 的功能,SQLAlchemy 就會自動將 LIMIT 的查詢條件附加到查詢的 SQL 語法後面。
範例:
1
2
for row in session.query(User)[500:520]:
print(row.id)
如上述加上 [500:520] ,就能夠看到 SQLAlchemy 的查詢指令多了 LIMIT ? OFFSET ? 的訊息。
其中 520 減 500 的數值為 LIMIT 的數值,限制 20 筆;而 500 為 OFFSET 從第 500 筆資料開始查詢。
GROUP BY
範例 SQL 指令 ─ SELECT * FROM user GROUP BY user.name
如果要使用 GROUP BY,則是使用 group_by() 。
1
2
for r in session.query(User).group_by(User.name):
print(r.name)
HAVING
範例 SQL 指令 ─ SELECT user.name FROM user GROUP BY user.name HAVING count(user.id) > 2
與 GROUP BY 常一起使用的通常會有 HAVING , COUNT() , SUM() , MAX() … 等語法。
在 SQLAlchemy 中 HAVING 是接在 group_by() 後的 having()方法,而 COUNT(), SUM(), MAX() 等函數則是由 SQLAlchemy 的 func 模組所實作,因此要使用 COUNT() , SUM() , MAX() 等函數須先 import func 模組。
1
from sqlalchemy import func
以下是結合 HAVING 及 COUNT() 的範例,用來列印出資料表內相同名字大於 2 個以上使用者名稱:
1
2
for row in session.query(User).group_by(User.name).having(func.count(User.id) > 2):
print(row.name)
Alias(AS)
範例 SQL 指令 ─ SELECT u.id FROM user AS u
表格的 AS 別名用法是使用 aliasd() 方法,可以將 Mapped Class 及表格名稱以別名進行查詢。
此一方法需要 import aliasd 模組。
1
from sqlalchemy.orm import aliased
表格名稱別名範例:
1
2
3
user_alias = aliased(User, name='user_alias')
for row in session.query(user_alias):
print(row.name)
如果成功,應該會看到 SELECT 的過程多了FROM user AS user_alias 的訊息出現,如下所示。
1
2
2013-08-25 11:52:45,177 INFO sqlalchemy.engine.base.Engine SELECT user_alias.id AS user_alias_id, user_alias.name AS user_alias_name, user_alias.username AS user_alias_username, user_alias.password AS user_alias_password
FROM user AS user_alias
此外,欄位名稱也能夠使用 AS 的 SQL 語法,不過在 SQLAlchemy 中則是用 label() 來命名。
範例如下:
1
2
for row in session.query(User.name.label('n')):
print(row.n)
計算查詢結果筆數
如要計算查詢結果筆數,使用 count() 即可。
例如:
1
2
3
print(
session.query(User).group_by(User.name).having(func.count(User.id) > 2).count()
)
注意:此處的 count() 與 func.count() 不同
first, scalar(), one(), all()
除了查詢結果筆數之外,SQLAlchemy 也提供了一些方便的方法確認查詢結果或回傳查詢結果。
first() 只回傳第一筆結果,即使有多筆結果也只會回傳第一筆
scalar() 只回傳第一筆結果,查無結果則回傳 None ,若有查詢有多筆結果則會產生例外錯誤
scalar() 範例如下:
1
2
3
4
5
6
7
8
9
try:
result = session.query(User).scalar()
except sqlalchemy.orm.exc.MultipleResultsFound:
print('MultipleResultsFound!')
else:
if result is None:
print('NoResultFound!')
else:
print(result.id)
one() 回傳一筆結果,如有多筆或查無結果的情況則會產生例外錯誤
one() 範例:
1
2
3
4
5
6
7
8
try:
result = session.query(User).one()
except sqlalchemy.orm.exc.NoResultFound:
print('NoResultFound!')
except sqlalchemy.orm.exc.MultipleResultsFound:
print('MultipleResultsFound!')
else:
print(result.id)
all() 將所有結果匯出成一個 list 回傳
all() 範例:
1
2
3
allres = session.query(User).all()
for r in allres:
print(r.id)
參考資料:
python安装sqlalchemy python2_Python SQLAlchemy --2相关推荐
- python安装orm_Python流行ORM框架sqlalchemy安装与使用教程
本文实例讲述了Python流行ORM框架sqlalchemy安装与使用.分享给大家供大家参考,具体如下: 安装 1.安装 #进入虚拟环境 #执行 ./python3 -m pip install im ...
- MySQL补充——索引,流程控制,数据备份,python操作mysql,SQLAlchemy
一.索引 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可. 1.索引种类 普通索引:仅加速查询 唯一索 ...
- Python数据库ORM工具sqlalchemy的学习笔记
SQLAlchemy是python的一个数据库ORM工具,提供了强大的对象模型间的转换,可以满足绝大多数数据库操作的需求,并且支持多种数据库引擎(sqlite,mysql,postgres, mong ...
- Python操作MySQL之SQLAlchemy
Python操作MySQL之SQLAlchemy 原文:https://www.cnblogs.com/ccorz/p/5711955.html SQLAlchemy是Python编程语言下的一款OR ...
- python学习之flask sqlalchemy介绍和使用 表操作增删查改
flask sqlalchemy介绍和使用 表操作增删查改 内容详细 1 sqlalchemy介绍和快速使用 1.1 介绍 # SQLAlchemy是一个基于Python实现的ORM框架# djang ...
- python安装要装oracle,python安装oracle数据库
Python中通过cx_Oracle访问数据库遇到的问题总结 以下是Python中通过cx_Oracle操作数据库的过程中我所遇到的问题总结,感谢我们测试组的前辈朱勃给予的帮助最终解决了下列两个问题: ...
- Python 安装 xlsx模块
为什么80%的码农都做不了架构师?>>> Python 安装 xlsx模块 很多时候自动化测试时测试用例是写在excel中的如何读取转换成字典是一个比较关键的问题,使用pip命 ...
- 笔记一:python安装和执行
一:学习内容 python安装 python简介 python执行 二:python安装 1. 下载python,网地址:https://www.python.org/,进入地址后,点击下载downl ...
- python3里的pillow怎么安装_“python安装pillow教程“python3.4怎么安装pil
"python安装pillow教程"python3.4怎么安装pil python安装pillow教程2020-10-09 03:37:02人已围观 如何在python3.6中装p ...
最新文章
- HDU-2084 数塔 经典dp,水
- NodeJS Events模块源码学习
- THINKPAD笔记本Fn组合键介绍
- ajax图书管理案例
- Codeup墓地-问题 A: 还是畅通工程
- Geometric Shapes - POJ 3449(多边形相交)
- scrapy middlewares.py
- canvas 压缩图片上传
- 【To Do!】程序员面试金典——11.8维护x的秩
- ppp协议、chap认证、HDLC封装、MGRE、GRE综合实验
- python量化交易是什么意思_量化交易通俗解释是什么?
- SUDA歌单管理软件,支持Spotify\Tidal\QQ\网易云导入导出歌单
- linux中括号的用法,全面梳理linux下shell中各种括号的作用和用法
- Rviz显示机器人运动轨迹
- 【工程应用五】 opencv中linemod模板匹配算法诸多疑惑和自我解读。
- loopback地址是什么?怎么配置
- ARC101E - Ribbons on Tree
- 鸿蒙能和ios媲美吗,把鸿蒙打造成一个和iOS相媲美的操作系统需要多久?
- 《Evaluate the Malignancy of Pulmonary Nodules Using the 3D Deep Leaky Noisy-or Network》论文解析
- 让背景出现毛玻璃的效果
热门文章
- 使用kubectl访问Kubernetes集群时的身份验证和授权
- matlab关于向量的基本操作
- wget 和scp对比_curl与wget区别
- 富文本编辑器 CKeditor 配置使用 (带附件)
- vue2.0+vue-video-player实现hls播放的案例
- Linux之find学习--详解
- 对于employees表中,给出奇数行的first_name
- 【CSS3】---last-of-type选择器+nth-last-of-type(n)选择器
- _itemmod_description
- Angular4---环境配置安装