SQLAlchemy 中字段类型与常见数据库(MySQL、PostgreSQL 和 SQLite)的全面映射关系表。这份映射关系可以帮助你在开发中选择正确的数据类型,确保代码在不同数据库之间具有良好的兼容性。
SQLAlchemy 数据类型与数据库字段类型映射表
SQLAlchemy 类型 | MySQL 类型 | PostgreSQL 类型 | SQLite 类型 | 说明 |
---|---|---|---|---|
db.Integer |
INTEGER |
INTEGER |
INTEGER |
4 字节整数,范围为 -2,147,483,648 到 2,147,483,647。 |
db.SmallInteger |
SMALLINT |
SMALLINT |
INTEGER |
2 字节整数,范围为 -32,768 到 32,767。 |
db.BigInteger |
BIGINT |
BIGINT |
INTEGER 或动态整数 |
8 字节整数,范围为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。 |
db.Float |
FLOAT |
REAL 或 DOUBLE PRECISION |
REAL |
单精度或双精度浮点数,具体取决于参数 precision 。 |
db.Numeric |
DECIMAL 或 NUMERIC |
NUMERIC |
动态数值 | 固定精度和小数位数的数值类型,适合存储货币等精确数值。 |
db.String(length) |
VARCHAR(length) |
VARCHAR(length) |
TEXT |
可变长度字符串,最大长度由 length 参数指定。 |
db.Text |
TEXT |
TEXT |
TEXT |
大文本字段,适合存储长字符串内容。 |
db.Unicode(length) |
VARCHAR(length) 或 NVARCHAR |
VARCHAR(length) |
TEXT |
支持 Unicode 的可变长度字符串。 |
db.UnicodeText |
TEXT 或 NTEXT |
TEXT |
TEXT |
支持 Unicode 的大文本字段。 |
db.Boolean |
TINYINT(1) |
BOOLEAN |
INTEGER |
布尔值,通常存储为 0 或 1 。 |
db.Date |
DATE |
DATE |
DATE |
日期字段,格式为 YYYY-MM-DD 。 |
db.Time |
TIME |
TIME |
TIME |
时间字段,格式为 HH:MM:SS 。 |
db.DateTime |
DATETIME |
TIMESTAMP |
TIMESTAMP |
日期时间字段,格式为 YYYY-MM-DD HH:MM:SS 。 |
db.Interval |
TIME 或 YEAR 等 |
INTERVAL |
不支持 | 时间间隔字段,表示一段时间跨度。 |
db.Enum |
ENUM |
ENUM |
TEXT |
枚举类型,适合存储有限的选项集合。 |
db.PickleType |
动态类型 | 动态类型 | 动态类型 | 序列化 Python 对象存储为二进制数据。 |
db.LargeBinary |
BLOB |
BYTEA |
BLOB |
大二进制对象字段,适合存储文件或其他二进制数据。 |
额外说明
-
db.String
和db.Text
的区别:db.String
适合存储较短的字符串(如名称、标题),需要指定长度。db.Text
适合存储长文本内容,无需指定长度。
-
db.Numeric
和db.Float
的选择:- 如果需要精确的小数运算(如货币计算),使用
db.Numeric
。 - 如果对精度要求不高,可以选择
db.Float
。
- 如果需要精确的小数运算(如货币计算),使用
-
db.Enum
的使用:db.Enum
在 MySQL 和 PostgreSQL 中会映射为原生的枚举类型,但在 SQLite 中会被映射为字符串。
-
db.PickleType
的注意事项:db.PickleType
将 Python 对象序列化后存储为二进制数据,适合存储复杂数据结构,但不建议用于长期存储,因为序列化格式可能随 Python 版本变化。
-
SQLite 的特殊性:
- SQLite 是动态类型的数据库,大多数 SQLAlchemy 类型都会映射为
TEXT
或INTEGER
,但功能上仍然可以满足需求。
- SQLite 是动态类型的数据库,大多数 SQLAlchemy 类型都会映射为
通过以上映射关系表,你可以根据实际需求选择合适的 SQLAlchemy 数据类型,并确保其在不同数据库中的正确映射。