SQLAlchemy 主要支持以下四种数据类型:
SQLAlchemy 通用类型
SQL 标准类型
数据库方言专属类型
用户自定义类型
SQLAlchemy 通用类型
SQLAlchemy 从各种数据库的 SQL 数据类型中提取通用类型,并将之存储在 sqlalchemy.types
模块里,为了方便调用,sqlalchemy
模块里也存储了通用类型。
比如,布尔数据类型一般是 SQL 的 BOOLEAN
类型,不过,有些数据库不支持 BOOLEAN
,用的是 SMALLINT
,借助 SQLAlchemy,则大可不必再去关心这些细节,在 Python 代码里只要写 True
或 False
就行了。
SQLAlchemy 通用类型在数据库迁移时特别实用,比如数据仓库里用 MySQL,而迁移的数据库用的是 Oracle,这时候用通用类型就不用考虑这两种数据库的数据类型区别,是不是简单多了!
通用类型、Python 与 SQL 对应的说明见下表:
SQLAlchemy | Python | SQL |
---|---|---|
BigInteger | int | BIGINT |
Boolean | bool | BOOLEAN 或 SMALLINT |
Date | datetime.date | DATE (SQLite: STRING) |
DateTime | datetime.datetime | DATETIME (SQLite: STRING) |
Enum | str | ENUM 或 VARCHAR |
Float | float 或 Decimal | FLOAT 或 REAL |
Integer | int | INTEGER |
Interval | datetime.timedelta | INTERVAL 或 DATE from epoch |
LargeBinary | byte | BLOB 或 BYTEA |
Numeric | decimal.Decimal | NUMERIC 或 DECIMAL |
Unicode | unicode | UNICODE 或 VARCHAR |
Text | str | CLOB 或 TEXT |
Time | datetime.time | DATETIME |
提示
编写 SQLAlchemy 程序时经常会用到通用类型,一定要牢记本表的内容。
此表摘自 Essential SQLAlchemy 一书。
SQL 标准类型
SQL 标准类型存储在 sqlalchemy.types
模块里,为了区分 SQLAlchemy 通用类型,SQL 标准类型用大写字符表示。
用处理 SQLAlchemy 定义概构时,一定要精准匹配数据类型。这里特别要注意,不同数据库的 SQL 标准类型会不同,要注意这些区别。
如果数据库概构已经指定使用 SQL 的某种特定类型,就不宜再用 SQLAlchemy 的通用类型,而建议使用 SQL 标准类型,比如,CHAR
或 NVARCHAR
这两种类型。
方言专属类型
方言专属类型存储在 sqlalchemy.dialects 模块里,每种方言都有对应的子模块。为了区分 SQLAlchemy 通用类型,这些类型也用大写字符表示。比如,下列语句调用 PostgreSQL 的 JSON
字段。
from sqlalchemy.dialects.postgresql import JSON
和 SQL 标准类型一样,方言专属类型也非常实用。只是这种数据类型只能在特定数据库里生效。要想了解具体方言专属类型,请查看该方言文档或
用户自定义类型
SQLAlchemy 支持根据数据存储方式自行定义数据类型。比如,向数据库增加记录时为 VARCHAR
列的文本添加前置字符;等到从字段里提取文本时,再去除前置字符。为新系统里的老系统遗留数据添加前缀时,这种自定义类型非常实用。
了解数据类型后,下一篇文章学习怎么用元数据封装数据库概构。
作者:呆鸟的简书
链接:https://www.jianshu.com/p/f1364df32652