SQLAlchemy 中字段类型与常见数据库(MySQL、PostgreSQL 和 SQLite)的全面映射关系
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 数据类型,并确保其在不同数据库中的正确映射。