### query可用参数:
1. 模型对象。指定查找这个模型中所有的对象。
2. 模型中的属性。可以指定只查找某个模型的其中几个属性。
3. 聚合函数。
* func.count:统计行的数量。
* func.avg:求平均值。
* func.max:求最大值。
* func.min:求最小值。
* func.sum:求和。
`func`上,其实没有任何聚合函数。但是因为他底层做了一些魔术,只要mysql中有的聚合函数,都可以通过func调用。
1 # coding:utf-8 2 # Author: liangjun.chen 3 4 from datetime import date 5 from datetime import datetime 6 from datetime import time 7 from random import random 8 from sqlalchemy import create_engine, Column, Integer, String, Float, func 9 10 from sqlalchemy.ext.declarative import declarative_base 11 from sqlalchemy.orm import sessionmaker 12 13 HOSTNAME = ‘127.0.0.1‘ 14 PORT = 3306 15 DATABASE = ‘sqlalchemy_first‘ 16 USERNAME = ‘root‘ 17 PASSWORD = ‘123456‘ 18 19 DB_URI = ‘mysql+pymysql://{username}:{password}@{host}:{port}/{dbname}?charset=utf8‘.format( 20 username=USERNAME, password=PASSWORD, host=HOSTNAME, port=PORT, dbname=DATABASE 21 ) 22 engine = create_engine(DB_URI) 23 Base = declarative_base(engine) 24 Session = sessionmaker(engine) 25 session = Session() 26 27 28 class Article(Base): 29 __tablename__ = ‘article‘ 30 id = Column(Integer, primary_key=True, autoincrement=True) 31 title = Column(String(50), nullable=False) 32 price = Column(Float, nullable=False) 33 34 def __repr__(self): 35 return "Article<title: {}, price: {}>".format(self.title, self.price) 36 37 Base.metadata.drop_all() 38 Base.metadata.create_all() 39 for _ in xrange(6): 40 article = Article(title=‘title{}‘.format(_), price=random()*100) 41 session.add(article) 42 session.commit() 43 44 # 查询结果为结果对象列表 45 articles = session.query(Article).all() 46 for arts in articles: 47 print arts 48 49 # 查询结果为元组 50 articles = session.query(Article.title, Article.price).all() 51 print articles 52 53 # 聚合函数 54 print session.query(func.count(Article.id)).all() 55 print session.query(func.avg(Article.price)).all() 56 print session.query(func.max(Article.price)).all() 57 print session.query(func.min(Article.price)).all() 58 print session.query(func.sum(Article.price)).all()