SQLaichemy三种排序方式
一、介绍
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中对应的模块,利用模块去真正的数据库中做操作
二、三种排序使用
order_by:可以指定根据这个表中的某个字段进行排序,如果在前面加了一个-,代表的是降序排序。
在模型定义的时候指定默认排序:有些时候,不想每次在查询的时候都指定排序的方式,可以在定义模型的时候就指定排序的方式。有以下两种方式:
在模型定义中,添加以下代码:
mapper_args = {
“order_by”: num.desc()
}
正序排序与倒序排序:默认是使用正序排序。如果需要使用倒序排序,那么可以使用这个字段的desc()
方法,或者是在排序的时候使用这个字段的字符串名字,然后在前面加一个负号。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三种排序方式相关推荐
- php根据下标倒序排,PHP的三种排序方式
数组排序 排序基础 大约有几十种方法的排序: php中,排序相当简单:一个函数搞定! 比如: $arr5 = array( 12, 'aa'=>8, 6=>10,'bb'=> 3, ...
- php爱奇艺筛选标签,三种排序 快速筛选好视频_软件资讯技巧应用-中关村在线
使用在线视频播放器来观看视频,通常有可以分为有目标和无目标两种.即是用户如果定点找一部视频和随意查看喜欢的视频,这两种模式往往查找视频的方法也是不一样的.我们这里要和大家讲解的是,用户在没有目标视频的 ...
- Java基础知识 21(Set集合,HashSet集合以及它的三种遍历方式(迭代器,增强for循环,forEach),LinkedHashSet集合,TreeSet集合(自然排序法,比较器排序法))
Java基础知识 21 Set集合 Set集合:一个不包含重复元素的Collection集合,元素不重复,List集合是允许元素重复的. Set接口的三个字类:HashSet(),LinkedHash ...
- oracle Hash Join及三种连接方式
在Oracle中,确定连接操作类型是执行计划生成的重要方面.各种连接操作类型代表着不同的连接操作算法,不同的连接操作类型也适应于不同的数据量和数据分布情况. 无论是Nest Loop Join(嵌套循 ...
- c语言中二叉树中总结点,C语言二叉树的三种遍历方式的实现及原理
二叉树遍历分为三种:前序.中序.后序,其中序遍历最为重要.为啥叫这个名字?是根据根节点的顺序命名的. 比如上图正常的一个满节点,A:根节点.B:左节点.C:右节点,前序顺序是ABC(根节点排最先,然后 ...
- mysql几种安装方法_mysql的三种安装方式(详细)
安装MySQL的方式常见的有三种: rpm包形式 通用二进制形式 源码编译 1,rpm包形式 (1) 操作系统发行商提供的 (2) MySQL官方提供的(版本更新,修复了更多常见BUG)www.mys ...
- (转)EF三种编程方式详细图文教程(C#+EF)之Database First
Entity Framework4.1之前EF支持"Database First"和"Model First"编程方式,从EF4.1开始EF开始支持支持&quo ...
- go kegg_玩转GO和KEGG富集因子图的N种姿势: 3种数据处理(含在线筛选条目),3种排序方式,本地交互图片...
适用场景 富集性分析是各组学进行数据分析的必备分析项,其中,尤以GO和KEGG富集因子图最为常见,见封面图.这张图非常经典,相比于其他富集分析结果,它包含了基因数目.p值和富集因子三个维度的信息量,更 ...
- 多重比较偏误及三种调整方式:Benferroni/Holm/BHY Adjustment
这是一篇文献阅读笔记,文献为: Harvey C R, Liu Y, Zhu H. - and the cross-section of expected returns[J]. The Review ...
最新文章
- 问题 c: 插入排序_插入排序:它是什么,以及它如何工作
- docker api 基本介绍和使用
- python3数据类型:Number(数字)
- 浅谈云原生架构的 7 个原则
- 谈谈关于MVP模式中V-P交互问题
- 虚拟机下挂载CentOS 镜像并配置yum本地镜像源
- 详解如何在vue项目中引入饿了么elementUI组件
- 手写深浅拷贝(js)
- 【笔记】scp如何复制文件到带空格路径的server目录
- SDIO接口(3)——SDIO总线接口
- linux系统微信怎么放桌面上,Linux 安装微信/QQ
- 车载导航升级凯立德的步骤
- 电脑键盘注册表已损坏导致无法输入信息的修复方式
- 软件测试的常用的面试题【带答案】
- 爬取起点小说总排行榜
- KICAD批量修改原理图(.sch)中的字段
- Elliptic Curve Cryptography: finite fields and discrete logarithms
- DataStream API
- java.lang.NoClassDefFoundError: org/codehaus/plexus/compiler/manager/NoSuchCompilerException
- 【收藏】最靠谱的笔记本电脑购买指南,让你少走弯路!
热门文章
- 未来计算机 军事,【军事科技】未来我国将建成和发明最具影响力的八大军事科技!...
- Geohash应用——附近乡镇信息挖掘(提升检索召回与准确)
- 【数据库】数据库索引
- 软件命名规范(版本号)
- 阵列分组,不足数,补足
- 威联通nas怎么更换大硬盘_扩充存储池:威联通NAS添加硬盘的扩容设置教程
- Shader编程学习笔记(九)—— Cg语言入门1 - 输入输出和语义
- Cg学习记录002 之Uniform参数
- 日期推算/日历(小程序)
- 实践一年之久,vivo 如何基于 APISIX 进行业务基础架构的演进