• 【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)
  • 相关阅读:
    30 Day Challenge Day 4 | Leetcode 102. Binary Tree Level Order Traversal
    30 Day Challenge Day 4 | Hackrank
    30 Day Challenge Day 4 | Leetcode 104. Maximum Depth of Binary Tree
    30 Day Challenge Day 3 | Leetcode 145. Binary Tree Postorder Traversal
    30 Day Challenge Day 3 | Leetcode 144. Binary Tree Preorder Traversal
    30 Day Challenge Day 2 | Leetcode 1302. Deepest Leaves Sum
    30 Day Challenge Day 2 | Leetcode 206. Reverse Linked List
    30 Day Challenge Day 1 | Leetcode 107. Binary Tree Level Order Traversal II
    30 Day Challenge Day 1 | Hackerrank
    刷题 | Leetcode 901. Online Stock Span | Stack
  • 原文地址:https://www.cnblogs.com/chen0427/p/8783688.html
Copyright © 2020-2023  润新知