先看这张图,这是从官方网站扒下来的。

Engine 翻译过来就是引擎的意思,汽车通过引擎来驱动,而 SQLAlchemy 是通过 Engine 来驱动,Engine 维护了一个连接池(Pool)对象和方言(Dialect)。方言简单而言就是你连的到底是 MySQL 还是 Oracle 或者 PostgreSQL 还是其它数据库,关于方言(Dialect)的介绍在另外一篇文章有介绍,可参考数据库方言dialect。

连接池很重要,因为每次发送sql查询的时候都需要先建立连接,如果程序启动的时候事先就初始化一批连接放在连接池,每次用完后又放回连接池给其它请求使用,就能大大提高查询的效率。

Engine 初始化

Engine 的初始化非常简单,通过工厂函数 create_engine 就可以创建。

from sqlalchemy import create_engine

engine = create_engine('mysql://user:password@localhost:3306/test?charset=utf8mb4')

构建好 Engine 对象的同时,连接池和Dialect也创建好了,但是这时候并不会立马与数据库建立真正的连接,只有你调用 Engine.connect() 或者 Engine.execute(sql) 执行SQL请求的时候,才会建立真正的连接。因此 Engine 和 Pool 的行为称之为延迟初始化,用现在流行的话来说就是延迟满足感,等真正要派上用场的时候才去建立连接。

需要注意的是,创建引擎时,如果数据库的密码含有特殊字符,需要先编码处理

>>> import urllib.parse

>>> urllib.parse.quote_plus("kx%jj5/g")

'kx%25jj5%2Fg'

其它数据库方言初始化 engine 的方式可参考官方文档

create_engine 还有很多可选参数,这里介绍几个重要的参数。

engine = create_engine('mysql://user:password@localhost:3306/test?charset=utf8mb4',

echo=False

pool_size=100,

pool_recycle=3600,

pool_pre_ping=True)

echo:为 True 时候会把sql语句打印出来,当然,你可以通过配置logger来控制输出,这里不做讨论。

pool_size: 是连接池的大小,默认为5个,0表示连接数无限制

pool_recycle: MySQL 默认情况下如果一个连接8小时内容没有任何动作(查询请求)就会自动断开链接,出现 MySQL has gone away的错误。设置了 pool_recycle 后 SQLAlchemy 就会在指定时间内回收连接。如果设置为3600 就表示 1小时后该连接会被自动回收。

pool_pre_ping : 这是1.2新增的参数,如果值为True,那么每次从连接池中拿连接的时候,都会向数据库发送一个类似 select 1 的测试查询语句来判断服务器是否正常运行。当该连接出现 disconnect 的情况时,该连接连同pool中的其它连接都会被回收。

参考链接:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

python sql解析引擎_python SQLAlchemy 中的Engine详解相关推荐

  1. python列转行函数_Python pandas 列转行操作详解(类似hive中explode方法)

    最近在工作上用到Python的pandas库来处理excel文件,遇到列转行的问题.找了一番资料后成功了,记录一下. 1. 如果需要爆炸的只有一列: df=pd.DataFrame({'A':[1,2 ...

  2. python语法错误概述_Python 错误和异常代码详解

    程序中的错误一般被称为 Bug,无可否认,这几乎总是程序员的错... 程序员的一生,始终伴随着一件事 - 调试(错误检测.异常处理).反反复复,最可怕的是:不仅自己的要改,别人的也要改...一万头草泥 ...

  3. python怎样实现封装_Python底层封装实现方法详解

    Python底层封装实现方法详解 这篇文章主要介绍了Python底层封装实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 事实上,pyth ...

  4. python函数参数定义_Python函数定义及参数详解

    函数定义 首先我们来创建一个函数,输出指定范围内的斐波拉契数列(Fibonacci series). #!/usr/bin/env python #coding=utf-8 ''' Created o ...

  5. python多进程应用场景_python使用多进程的实例详解

    python多线程适合IO密集型场景,而在CPU密集型场景,并不能充分利用多核CPU,而协程本质基于线程,同样不能充分发挥多核的优势. 针对计算密集型场景需要使用多进程,python的multipro ...

  6. python语言格式化输出_Python format()格式化输出方法详解

    原标题:Python format()格式化输出方法详解 format() 方法的语法格式如下: str.format(args) 此方法中,str 用于指定字符串的显示样式:args 用于指定要进行 ...

  7. python对象底层原理_Python字符串对象实现原理详解

    在Python世界中将对象分为两种:一种是定长对象,比如整数,整数对象定义的时候就能确定它所占用的内存空间大小,另一种是变长对象,在对象定义时并不知道是多少,比如:str,list, set, dic ...

  8. python的底层实现_Python底层封装实现方法详解

    这篇文章主要介绍了Python底层封装实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 事实上,python封装特性的实现纯属" ...

  9. python统计汉字字数_Python 统计字数的思路详解

    问题描述: 用 Python 实现函数 count_words(),该函数输入字符串 s 和数字 n,返回 s 中 n 个出现频率最高的单词.返回值是一个元组列表,包含出现次数最高的 n 个单词及其次 ...

最新文章

  1. MSBuild + MSILInect实现编译时AOP-改变前后对比
  2. 在Linux上安装CHM查看工具
  3. 中国牙膏产业深陷 “氟中毒”?
  4. java公钥加密私钥解密过程_GPG加密解密过程
  5. [分布式] ------ 全局唯一id生成之雪花算法(Twitter_Snowflake)
  6. ios时间相差多少天_上海自驾拉萨,走川进青出,应如何规划线路?需要多少天时间?...
  7. Json 读写操作中含有中文时
  8. 【渝粤教育】电大中专跨境电子商务理论与实务 (8)作业 题库
  9. agc016B - Colorful Hats(智商题)
  10. WIN7的便签使用快捷键
  11. 比特大陆招股书讲了个AI的故事,但资本市场愿意听吗?
  12. 钉钉如何群里定时发送文件_简单好用的钉钉群消息助手
  13. 这个方法可以实现自动抠图,快来get
  14. [system] Map key not configured
  15. 【大数据】大数据-实时统计分析-方案选型
  16. 工厂模式实现多种数据库连接
  17. amos看拟合度在哪里看_Amos软件完结篇!模型无法拟合,拟合指标不佳如何解决?...
  18. UPC 备战省赛第六场 Bumped!
  19. Micheal Jackson 离开了我们
  20. MYSQL 金额转大写中文

热门文章

  1. 重庆职高统考c语言,2021年重庆市中职毕业生参加高职分类考试招生文化素质测试 考试说明...
  2. data后缀文件解码_WMA文件格式和解码流程 | 学步园
  3. 全面讲解Python列表数组(三)列表数组类型的内置函数方法
  4. python基础:try...except...的详细用法
  5. Python如何存储数据到json文件
  6. Python如何实现单例模式?其他23中设计模式python如何实现?
  7. pcb成型板aoi检测_缺陷检测 | PCB AOI质量检测之自动定位核选取算法
  8. pycharm更换源(换源)(镜像源)
  9. Intel Realsense深度摄像头的自校准功能(self-calibration-for-depth-cameras)
  10. python PyQt5.QtWidgets.QApplication类(sys.argv)(app应用对象类)