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 …

Continue Reading

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 …

Continue Reading