【呆鸟译Py】玩转SQLAlchemy 03 - 数据类型

96
呆鸟的简书
1.4 2018.12.11 14:12* 字数 769
玩转SQLAlchemy-03

玩转SQLAlchemy 01 - 简介
玩转SQLAlchemy 02 - 安装与关联数据库
玩转SQLAlchemy 03 - 数据类型


SQLAlchemy 主要支持以下四种数据类型:

  • SQLAlchemy 通用类型
  • SQL 标准类型
  • 数据库方言专属类型
  • 用户自定义类型

SQLAlchemy 通用类型

SQLAlchemy 从各种数据库的 SQL 数据类型中提取通用类型,并将之存储在 sqlalchemy.types 模块里,为了方便调用,sqlalchemy 模块里也存储了通用类型。

比如,布尔数据类型一般是 SQL 的 BOOLEAN 类型,不过,有些数据库不支持 BOOLEAN,用的是 SMALLINT,借助 SQLAlchemy,则大可不必再去关心这些细节,在 Python 代码里只要写 TrueFalse 就行了。

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 标准类型,比如,CHARNVARCHAR 这两种类型。

方言专属类型

方言专属类型存储在 sqlalchemy.dialects 模块里,每种方言都有对应的子模块。为了区分 SQLAlchemy 通用类型,这些类型也用大写字符表示。比如,下列语句调用 PostgreSQL 的 JSON 字段。

from sqlalchemy.dialects.postgresql import JSON

和 SQL 标准类型一样,方言专属类型也非常实用。只是这种数据类型只能在特定数据库里生效。要想了解具体方言专属类型,请查看该方言文档或 SQLAlchemy 官网

用户自定义类型

SQLAlchemy 支持根据数据存储方式自行定义数据类型。比如,向数据库增加记录时为 VARCHAR 列的文本添加前置字符;等到从字段里提取文本时,再去除前置字符。为新系统里的老系统遗留数据添加前缀时,这种自定义类型非常实用。

了解数据类型后,下一篇文章学习怎么用元数据封装数据库概构


玩转SQLAlchemy 01 - 简介
玩转SQLAlchemy 02 - 安装与关联数据库
玩转SQLAlchemy 03 - 数据类型


呆鸟译Py