SQLAlchemy中如何设置数据库连接参数
我们的Python编写的服务程序使用了SQLAlchemy访问数据库系统(MySQL). 为了满足PCI DSS安全性合规的要求, 我们需要使用TLS v1.1或TLS v1.2来加密数据库连接.
在配置好了数据库服务器端的TLS以后, 我们还需要配置数据库客户端的参数. 对于MySQL客户端来说, 最少应该配置 TLS CA的路径. 我们使用了MySQL Connector/Python作为数据库连接驱动程序, 它支持的配置参数是 ssl_ca. 我们不是直接使用MySQL Connector/Python, 而是通过SQLAlchemy来调用的, 因此我们需要寻找SQLAlchemy中的配置.
在SQLAlchemy中, 与数据库连接相关的是其Engine对象. Engine的配置可以分为两类. 第一类是对于SQLAlchemy而言的, 与底层的数据库驱动程序无关的; 第二类是特定于底层的数据库驱动程序的. 第一类主要与连接池, 字符编码等有关. 因此, 我们所需要的ssl_ca属于第二类的配置.
SQLAlchemy提供了三种方式来提供特定于数据库驱动程序的参数设置方式.
方式一: 附加于连接字符串之后.
mysql+mysqlconnector://user:password@host:port/dbname?ssl_ca=/etc/pki/ca …
Python sqlalchemy 数据类型转换
将字符串类型的数据存放到数据库中,是一个很常见的任务。在Python数据库开发中,我们经常使用sqlalchemy定义数据模型。多数情况下,不管模型中定义的数据类型是什么,我们都可以直接将字符串赋值给各字段,然后sqlalchemy会帮我们进行转换。 有时候,我们也需要自己做类型转换。比如,我们希望获得数据记录的变动情况,就需要比较输入字符串类型的数据和从数据库中查询到的数据记录。类型不一致,就不能准确地比较。本文介绍的类型转换方法,是基于模型定义中的数据类型,以及它们与Python类型的对应关系而实现的。
数据类型是很多的。本文只介绍最常见的需要转换的类型,即日期和数值。
数据例子
数据例子包含一个sqlalchemy 数据模型定义 和 一个输入数据。我们需要把全部是字符串类型的输入数据, 根据模型进行字段类型转换。
数据模型
class Project(Base): __tablename__ = 'project' id = Column(Integer, primary_key=True) project_name = Column(String) due_date = Column(Date) cost = Column(Numeric(13,2 …