【Flask】sqlalchemy 排序

### 排序:
1. order_by:可以指定根据这个表中的某个字段进行排序,如果在前面加了一个-,代表的是降序排序。
2. 在模型定义的时候指定默认排序:有些时候,不想每次在查询的时候都指定排序的方式,可以在定义模型的时候就指定排序的方式。有以下两种方式:
* relationship的order_by参数:在指定relationship的时候,传递order_by参数来指定排序的字段。
* 在模型定义中,添加以下代码:

__mapper_args__ = {
"order_by": title
}

即可让文章使用标题来进行排序。
3. 正序排序与倒序排序:默认是使用正序排序。如果需要使用倒序排序,那么可以使用这个字段的`desc()`方法,或者是在排序的时候使用这个字段的字符串名字,然后在前面加一个负号。

 

 1 #encoding: utf-8
 2 
 3 from sqlalchemy import create_engine,Column,Integer,Float,Boolean,DECIMAL,Enum,Date,DateTime,Time,String,Text,func,and_,or_,ForeignKey,Table
 4 from sqlalchemy.dialects.mysql import LONGTEXT
 5 from sqlalchemy.ext.declarative import declarative_base
 6 from sqlalchemy.orm import sessionmaker,relationship,backref
 7 # 在Python3中才有这个enum模块,在python2中没有
 8 import enum
 9 from datetime import datetime
10 import random
11 
12 HOSTNAME = '127.0.0.1'
13 PORT = '3306'
14 DATABASE = 'first_sqlalchemy'
15 USERNAME = 'root'
16 PASSWORD = 'root'
17 
18 # dialect+driver://username:password@host:port/database
19 DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8mb4".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)
20 
21 engine = create_engine(DB_URI)
22 
23 Base = declarative_base(engine)
24 
25 session = sessionmaker(engine)()
26 
27 class User(Base):
28     __tablename__ = 'user'
29     id = Column(Integer, primary_key=True, autoincrement=True)
30     username = Column(String(50),nullable=False)
31 
32 
33 class Article(Base):
34     __tablename__ = 'article'
35     id = Column(Integer, primary_key=True, autoincrement=True)
36     title = Column(String(50), nullable=False)
37     create_time = Column(DateTime,nullable=False,default=datetime.now)
38     uid = Column(Integer,ForeignKey("user.id"))
39 
40     author = relationship("User",backref=backref("articles", order_by=create_time.desc()))
41 
42     __mapper_args__ = {
43         "order_by": create_time.desc()
44     }
45 
46     def __repr__(self):
47         return "<Article(title:%s,create_time:%s)>" % (self.title,self.create_time)
48 
49 
50 # Base.metadata.drop_all()
51 # Base.metadata.create_all()
52 #
53 # article1 = Article(title='title1')
54 # user = User(username='zhiliao')
55 # user.articles = [article1]
56 # session.add(user)
57 # session.commit()
58 #
59 # import time
60 # time.sleep(2)
61 #
62 # article2 = Article(title='title2')
63 # user.articles.append(article2)
64 # session.commit()
65 
66 # 正序排序
67 # 倒序排序
68 # articles = session.query(Article).all()
69 # print(articles)
70 
71 user = session.query(User).first()
72 print(user.articles)

 

posted @ 2018-04-10 22:36  小小易拉罐  阅读(11200)  评论(0编辑  收藏  举报