sqlalchemy query函式可用引數有哪些?
一、模型名
二、模型物件屬性
三、聚合函式
名稱 | 作用 |
func.sum | 求和 |
func.max | 求最大值 |
func.min | 求最小值 |
func.count | 求行數 |
func.avg | 求平均值 |
下面就分別為大家講講query函式這三種引數的用法。
在講之前,我已經把資料庫連線配置、模型,以及新增資料寫好了,程式碼如下:
from sqlalchemy import create_engine,Column,String,Integer from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm.session import sessionmaker import random DIALCT = "mysql" DRIVER = "pymysql" USERNAME = "root" PASSWORD = "admin" HOST = "127.0.0.1" PORT = "3306" DATABASE = "test" DB_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALCT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE) engine = create_engine(DB_URI) Base = declarative_base(engine) session = sessionmaker(engine)() class Student(Base): __tablename__ = "student" id = Column(Integer , primary_key=True , autoincrement=True) name = Column(String(50)) score = Column(Integer) def __repr__(self): return "<Student name:%s,score:%s>"%(self.name,self.score) Base.metadata.drop_all() Base.metadata.create_all() for i in range(6): # random.randint(0,100) 隨機生成一個0-100之間的成績 student = Student(name = "name%s"%i,score=random.randint(0,100)) session.add(student) session.commit()
相信看過我文章的朋友,對於上面程式碼理解已經沒啥問題了!
第一種:模型名
語法:query(模型名)
假如我們現在要查詢表中所有學生資料,方法如下:
results = session.query(Student).all()
for result in results:
print(result)
執行上述程式碼,然後就可以看到查詢結果了。
在前面我所講的關於sqlalchemy文章中,基本都是以該方式來查詢資料的。相信大家也都會了,沒啥好講的。
第二種:模型物件屬性
語法:query(模型名.模型屬性)
比如我們現在只想查看錶中所有學生的姓名(看到成績頭有點大),程式碼如下:
results = session.query(Student.name).all()
for result in results:
print(result)
執行上述程式碼,我們就可以看到所有學生姓名了,結果如下:
第三種:聚合函式
上述表中我已列出所有所有的聚合函式,下馬我就一一為大家講講。注意:在使用聚合函式前,記得從sqlalchemy匯入
from sqlalchemy import create_engine,Column,String,Integer,func
1、func.sum
語法:query(func.sum(模型物件屬性))
比如想要知道所有學生成績之和,那麼我們就可以使用func.sum這個聚合函式來實現
results = session.query(func.sum(Student.score)).all()
print(results)
執行程式碼,結果學生成績之和就計算好了。
2、func.max
語法:query(func.max(模型物件屬性))
如果要查詢考試成績最高的哪個學生,就可以使用func.max這個函式
results = session.query(func.max(Student.score)).all()
print(results)
嗯,查詢出來的學生成績最高分是98分
3、func.min
語法:query(func.min(模型物件屬性))
我們知道最高分,然後想知道班上學生成績波動大小。哪怎麼辦呢??想知道成績波動大小,我們是不是還得知道班上成績最低分,是吧?然後用最大值減去最小值除以二就可以求出學生成績波動大小了。哪如何找出最小值呢?方法就是使用func.min這個聚合函式。
results = session.query(func.min(Student.score)).all()
print(results)
執行上述程式碼,我們就可以查詢到分數最低的哪個。
4、func.count
語法:query(func.count(模型物件屬性))
results = session.query(func.count(Student.score)).all()
print(results)
不出什麼意外的話,我們就能得到下面結果(沒錯吧,總共是6行):
5、func.avg
語法:query(func.avg(模型物件屬性))
期末考試考完,學校通常是不是要跟年級進行對比?對比啥?當然是班級考試成績排名、好壞啦!那麼如何對比呢?是不是通過考試成績平均分,是吧?我說的沒錯吧?OK,func.avg這個聚合函式就是為解決求平均值而生的。
results = session.query(func.avg(Student.score)).all()
print(results)
執行上述程式碼,結果如下:
平均分是58.3333,考的有點不太理想啊。
上面就是關於query函式可用引數講解。文章若有不當之處,歡迎大家指出!