python SQLAlchemy中的引擎详解

  

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

  

 python SQLAlchemy中的引擎详解

  

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

  

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

  

  

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

        从sqlalchemy进口create_engine      引擎=create_engine (“mysql://用户:password@localhost: 3306/测试# 63;charset=utf8mb4 ')      

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

  

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

        在在在进口urllib.parse   在在在urllib.parse.quote_plus (“kx % jj5/g”)   “kx % 25 jj5 % 2 fg”      

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

  

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

        引擎=create_engine (mysql://用户:password@localhost: 3306/测试# 63;charset=utf8mb4 ',   回声=False   pool_size=100,   pool_recycle=3600,   pool_pre_ping=True)      

<>强回声:为真正的时候会把sql语句打印出来,当然,你可以通过配置记录器来控制输出,这里不做讨论。

  

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

  

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

  

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

  

参考链接:

  
      <李> https://docs.sqlalchemy.org/en/14/core/engines.html database-urls李   <李> https://stackoverflow.com/questions/34322471/sqlalchemy-engine-connection-and-session-difference   <李> https://docs.sqlalchemy.org/en/13/core/pooling.html dealing-with-disconnects李   
  

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

python SQLAlchemy中的引擎详解