### 排序:
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)