列和数据类型
SQLAlchemy为最常见的数据库数据类型提供了抽象,并提供了一种指定您自己的自定义数据类型的机制。
类型对象的方法和属性很少直接使用。类型对象提供给 Table
定义和可以作为类型提示提供给 functions 对于数据库驱动程序返回错误类型的情况。
>>> users = Table('users', metadata, ... Column('id', Integer, primary_key=True), ... Column('login', String(32)) ... )
SQL炼金术将使用 Integer
和 String(32)
发布时键入信息 CREATE TABLE
语句,并在读回行时再次使用它 SELECTed
从数据库中。接受类型的函数(例如 Column()
)通常接受类型类或实例; Integer
等于 Integer()
在本例中没有构造参数。
泛型类型
泛型类型指定可以读取、写入和存储特定类型的Python数据的列。当发出一个 CREATE TABLE
语句。用于完全控制在哪个列类型中发出 CREATE TABLE
,如 VARCHAR
看见 SQL标准和多个供应商类型 以及本章的其他章节。
Object Name | Description |
---|---|
一种更大的 | |
bool数据类型。 | |
一种类型 | |
一种类型 | |
通用枚举类型。 | |
表示浮点类型的类型,例如 | |
一种类型 | |
一种类型 | |
用于大二进制字节数据的类型。 | |
引用match运算符的返回类型。 | |
用于固定精度数字的类型,例如 | |
保存使用pickle序列化的python对象。 | |
将类型标记为可能需要架构级DDL才能使用。 | |
较小的一种 | |
所有字符串和字符类型的基。 | |
大小可变的字符串类型。 | |
一种类型 | |
长度可变的Unicode字符串类型。 | |
无限长的Unicode字符串类型。 |
- class sqlalchemy.types.BigInteger
此类类型指的是属于SQL标准的一部分或可能在数据库后端子集中找到的类型。与“一般”类型不同,SQL标准/多供应商类型具有 no 保证在所有后端上工作,并且只在那些以名称显式支持它们的后端上工作。也就是说,类型将始终在DDL中发出其确切名称
CREATE TABLE
发行。Object Name Description 表示SQL数组类型。
SQL bigint类型。
SQL二进制类型。
SQL blob类型。
SQL布尔类型。
SQL字符类型。
Culb型。
SQL日期类型。
SQL日期时间类型。
SQL十进制类型。
SQL浮点类型。
alias of
sqlalchemy.sql.sqltypes.INTEGER
SQL int或integer类型。
表示SQL JSON类型。
SQL NChar类型。
SQL数值类型。
SQL nvarchar类型。
SQL实数类型。
SQL smallint类型。
SQL文本类型。
SQL时间类型。
SQL时间戳类型。
sql varbinary类型。
SQL varchar类型。
- class sqlalchemy.types.ARRAY(item_type, as_tuple=False, dimensions=None, zero_indexes=False)
还可以从每个数据库的方言模块中导入特定于数据库的类型。见 方言 对您感兴趣的数据库的引用。
例如,mysql有一个
BIGINT
类型和PostgreSQL具有INET
类型。要使用这些,请从模块中显式导入它们:from sqlalchemy.dialects import mysql table = Table('foo', metadata, Column('id', mysql.BIGINT), Column('enumerates', mysql.ENUM('a', 'b', 'c')) )
或某些PostgreSQL类型:
from sqlalchemy.dialects import postgresql table = Table('foo', metadata, Column('ipaddress', postgresql.INET), Column('elements', postgresql.ARRAY(String)) )
每个方言在其内部提供该后端支持的完整类型名集 __all__ 集合,使 import * 或类似操作将导入为该后端实现的所有支持类型:
from sqlalchemy.dialects.postgresql import * t = Table('mytable', metadata, Column('id', INTEGER, primary_key=True), Column('name', VARCHAR(300)), Column('inetaddr', INET) )
其中,integer和varchar类型最终来自sqlacalchemy.types,inet特定于PostgreSQL方言。
某些方言级别类型与SQL标准类型具有相同的名称,但也提供了其他参数。例如,MySQL实现了完整的字符和字符串类型,包括其他参数,例如 collation 和 charset ::
from sqlalchemy.dialects.mysql import VARCHAR, TEXT table = Table('foo', meta, Column('col1', VARCHAR(200, collation='binary')), Column('col2', TEXT(charset='latin1')) )