目录

列和数据类型

优质
小牛编辑
129浏览
2023-12-01

SQLAlchemy为最常见的数据库数据类型提供了抽象,并提供了一种指定您自己的自定义数据类型的机制。

类型对象的方法和属性很少直接使用。类型对象提供给 Table 定义和可以作为类型提示提供给 functions 对于数据库驱动程序返回错误类型的情况。

>>> users = Table('users', metadata,
...               Column('id', Integer, primary_key=True),
...               Column('login', String(32))
...              )

SQL炼金术将使用 IntegerString(32) 发布时键入信息 CREATE TABLE 语句,并在读回行时再次使用它 SELECTed 从数据库中。接受类型的函数(例如 Column() )通常接受类型类或实例; Integer 等于 Integer() 在本例中没有构造参数。

泛型类型

泛型类型指定可以读取、写入和存储特定类型的Python数据的列。当发出一个 CREATE TABLE 语句。用于完全控制在哪个列类型中发出 CREATE TABLE ,如 VARCHAR 看见 SQL标准和多个供应商类型 以及本章的其他章节。

Object NameDescription

BigInteger

一种更大的 int 整数。

Boolean

bool数据类型。

Date

一种类型 datetime.date() 物体。

DateTime

一种类型 datetime.datetime() 物体。

Enum

通用枚举类型。

Float

表示浮点类型的类型,例如 FLOATREAL .

Integer

一种类型 int 整数。

Interval

一种类型 datetime.timedelta() 物体。

LargeBinary

用于大二进制字节数据的类型。

MatchType

引用match运算符的返回类型。

Numeric

用于固定精度数字的类型,例如 NUMERICDECIMAL .

PickleType

保存使用pickle序列化的python对象。

SchemaType

将类型标记为可能需要架构级DDL才能使用。

SmallInteger

较小的一种 int 整数。

String

所有字符串和字符类型的基。

Text

大小可变的字符串类型。

Time

一种类型 datetime.time() 物体。

Unicode

长度可变的Unicode字符串类型。

UnicodeText

无限长的Unicode字符串类型。

class sqlalchemy.types.BigInteger

此类类型指的是属于SQL标准的一部分或可能在数据库后端子集中找到的类型。与“一般”类型不同,SQL标准/多供应商类型具有 no 保证在所有后端上工作,并且只在那些以名称显式支持它们的后端上工作。也就是说,类型将始终在DDL中发出其确切名称 CREATE TABLE 发行。

Object NameDescription

ARRAY

表示SQL数组类型。

BIGINT

SQL bigint类型。

BINARY

SQL二进制类型。

BLOB

SQL blob类型。

BOOLEAN

SQL布尔类型。

CHAR

SQL字符类型。

CLOB

Culb型。

DATE

SQL日期类型。

DATETIME

SQL日期时间类型。

DECIMAL

SQL十进制类型。

FLOAT

SQL浮点类型。

INT

alias of sqlalchemy.sql.sqltypes.INTEGER

INTEGER

SQL int或integer类型。

JSON

表示SQL JSON类型。

NCHAR

SQL NChar类型。

NUMERIC

SQL数值类型。

NVARCHAR

SQL nvarchar类型。

REAL

SQL实数类型。

SMALLINT

SQL smallint类型。

TEXT

SQL文本类型。

TIME

SQL时间类型。

TIMESTAMP

SQL时间戳类型。

VARBINARY

sql varbinary类型。

VARCHAR

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实现了完整的字符和字符串类型,包括其他参数,例如 collationcharset ::

from sqlalchemy.dialects.mysql import VARCHAR, TEXT

table = Table('foo', meta,
    Column('col1', VARCHAR(200, collation='binary')),
    Column('col2', TEXT(charset='latin1'))
)