一、介绍

SQLALchemy也是一个python的ORM框架,django内部的ORM框架只适用于django,而SQLALchemy适用于所有python的web框架

SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作

  • List item

  • Engine,框架的引擎

  • Connection Pooling ,数据库连接池

  • Dialect,选择连接数据库的DB API种类

  • Schema/Types,架构和类型

  • SQL Exprression Language,SQL表达式语言

  • DBAPI,也就是pymysql或者MySQLdb模块

总体流程:类和对象的操作转换为SQL语句交给框架引擎,引擎去数据库连接池拿连接。从Dialect获取用哪个模块,然后调用DBAPI中对应的模块,利用模块去真正的数据库中做操作

二、三种排序使用

  1. order_by:可以指定根据这个表中的某个字段进行排序,如果在前面加了一个-,代表的是降序排序。

  2. 在模型定义的时候指定默认排序:有些时候,不想每次在查询的时候都指定排序的方式,可以在定义模型的时候就指定排序的方式。有以下两种方式:
    在模型定义中,添加以下代码:
    mapper_args = {
    “order_by”: num.desc()
    }
    正序排序与倒序排序:默认是使用正序排序。如果需要使用倒序排序,那么可以使用这个字段的desc()方法,或者是在排序的时候使用这个字段的字符串名字,然后在前面加一个负号。

  3. relationship的order_by参数:在指定relationship的时候,传递order_by参数来指定排序的字段。

笔者在过程中发现,使用__mapper_args__ 时候如果python环境大于python3.7的话,就会报错TypeError: init() got an unexpected keyword argument ‘order_by’,所以在使用过程中请注意自己的python环境,具体原因笔者现在还在研究,如果有收获,会更新文章。


```python
from datetime import datetimefrom sqlalchemy.orm import sessionfrom sqlalchemy import create_engine, Column, Integer, String, Float, Text, ForeignKey, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship, backrefhost = '10.121.121.241'
port = '3306'
database = 'db_to_sqlalchemy'
username = 'root'
password = '123456'DB_URI = f'mysql+pymysql://{username}:{password}@{host}:{port}/{database}'engine = create_engine(DB_URI)  # 创建引擎
Base = declarative_base(engine)  # 使用declarative_base创建基类
session = sessionmaker(engine)()class Article(Base):__tablename__ = 'article'id = Column(Integer, primary_key=True, autoincrement=True)title = Column(String(50), nullable=False)create_time = Column(DateTime, nullable=False, default=datetime.now)num = Column(Integer, default=0, nullable=False)author = relationship("Article",backref=backref("articles", order_by=num .desc()))# __mapper_args__ = {#     "order_by": num.desc()# }def __repr__(self):return f'title: {self.title}、create_time: {self.create_time}、num: {self.num}'# Base.metadata.drop_all()  # 删除所有表
# Base.metadata.create_all()  # 创建表# article1 = Article(title='title1',num=7)
# session.add(article1)
# session.commit()
# time.sleep(1)
# article2 = Article(title='title2',num=2)
# session.add(article2)
# session.commit()
# time.sleep(1)
# article2 = Article(title='title3',num=4)
# session.add(article2)
# session.commit()
# time.sleep(1)
# article2 = Article(title='title4',num=19)
# session.add(article2)
# session.commit()# article = session.query(Article).order_by(Article.num.desc()).all()
# print(article)article = session.query(Article).all()
print(article)

SQLaichemy三种排序方式相关推荐

  1. php根据下标倒序排,PHP的三种排序方式

    数组排序 排序基础 大约有几十种方法的排序: php中,排序相当简单:一个函数搞定! 比如: $arr5 = array( 12, 'aa'=>8, 6=>10,'bb'=> 3, ...

  2. php爱奇艺筛选标签,三种排序 快速筛选好视频_软件资讯技巧应用-中关村在线

    使用在线视频播放器来观看视频,通常有可以分为有目标和无目标两种.即是用户如果定点找一部视频和随意查看喜欢的视频,这两种模式往往查找视频的方法也是不一样的.我们这里要和大家讲解的是,用户在没有目标视频的 ...

  3. Java基础知识 21(Set集合,HashSet集合以及它的三种遍历方式(迭代器,增强for循环,forEach),LinkedHashSet集合,TreeSet集合(自然排序法,比较器排序法))

    Java基础知识 21 Set集合 Set集合:一个不包含重复元素的Collection集合,元素不重复,List集合是允许元素重复的. Set接口的三个字类:HashSet(),LinkedHash ...

  4. oracle Hash Join及三种连接方式

    在Oracle中,确定连接操作类型是执行计划生成的重要方面.各种连接操作类型代表着不同的连接操作算法,不同的连接操作类型也适应于不同的数据量和数据分布情况. 无论是Nest Loop Join(嵌套循 ...

  5. c语言中二叉树中总结点,C语言二叉树的三种遍历方式的实现及原理

    二叉树遍历分为三种:前序.中序.后序,其中序遍历最为重要.为啥叫这个名字?是根据根节点的顺序命名的. 比如上图正常的一个满节点,A:根节点.B:左节点.C:右节点,前序顺序是ABC(根节点排最先,然后 ...

  6. mysql几种安装方法_mysql的三种安装方式(详细)

    安装MySQL的方式常见的有三种: rpm包形式 通用二进制形式 源码编译 1,rpm包形式 (1) 操作系统发行商提供的 (2) MySQL官方提供的(版本更新,修复了更多常见BUG)www.mys ...

  7. (转)EF三种编程方式详细图文教程(C#+EF)之Database First

    Entity Framework4.1之前EF支持"Database First"和"Model First"编程方式,从EF4.1开始EF开始支持支持&quo ...

  8. go kegg_玩转GO和KEGG富集因子图的N种姿势: 3种数据处理(含在线筛选条目),3种排序方式,本地交互图片...

    适用场景 富集性分析是各组学进行数据分析的必备分析项,其中,尤以GO和KEGG富集因子图最为常见,见封面图.这张图非常经典,相比于其他富集分析结果,它包含了基因数目.p值和富集因子三个维度的信息量,更 ...

  9. 多重比较偏误及三种调整方式:Benferroni/Holm/BHY Adjustment

    这是一篇文献阅读笔记,文献为: Harvey C R, Liu Y, Zhu H. - and the cross-section of expected returns[J]. The Review ...

最新文章

  1. 问题 c: 插入排序_插入排序:它是什么,以及它如何工作
  2. docker api 基本介绍和使用
  3. python3数据类型:Number(数字)
  4. 浅谈云原生架构的 7 个原则
  5. 谈谈关于MVP模式中V-P交互问题
  6. 虚拟机下挂载CentOS 镜像并配置yum本地镜像源
  7. 详解如何在vue项目中引入饿了么elementUI组件
  8. 手写深浅拷贝(js)
  9. 【笔记】scp如何复制文件到带空格路径的server目录
  10. SDIO接口(3)——SDIO总线接口
  11. linux系统微信怎么放桌面上,Linux 安装微信/QQ
  12. 车载导航升级凯立德的步骤
  13. 电脑键盘注册表已损坏导致无法输入信息的修复方式
  14. 软件测试的常用的面试题【带答案】
  15. 爬取起点小说总排行榜
  16. KICAD批量修改原理图(.sch)中的字段
  17. Elliptic Curve Cryptography: finite fields and discrete logarithms
  18. DataStream API
  19. java.lang.NoClassDefFoundError: org/codehaus/plexus/compiler/manager/NoSuchCompilerException
  20. 【收藏】最靠谱的笔记本电脑购买指南,让你少走弯路!

热门文章

  1. 未来计算机 军事,【军事科技】未来我国将建成和发明最具影响力的八大军事科技!...
  2. Geohash应用——附近乡镇信息挖掘(提升检索召回与准确)
  3. 【数据库】数据库索引
  4. 软件命名规范(版本号)
  5. 阵列分组,不足数,补足
  6. 威联通nas怎么更换大硬盘_扩充存储池:威联通NAS添加硬盘的扩容设置教程
  7. Shader编程学习笔记(九)—— Cg语言入门1 - 输入输出和语义
  8. Cg学习记录002 之Uniform参数
  9. 日期推算/日历(小程序)
  10. 实践一年之久,vivo 如何基于 APISIX 进行业务基础架构的演进