SQLAlchemy为大多数常用数据库数据类型提供了抽象,并提供了一种用于指定自己的自定义数据类型的机制。
类型对象的方法和属性很少直接使用。Type对象提供给Table
定义,对于数据库驱动程序返回不正确类型的场合,可以作为类型提示提供给functions。
>>> users = Table('users', metadata,
... Column('id', Integer, primary_key=True)
... Column('login', String(32))
... )
SQLAlchemy在发布CREATE TABLE时将使用
接受类型的函数(比如Integer
和String(32)
t4>语句,并在从数据库读回行SELECTed
时再次使用它。Column()
)通常会接受一个类型类或实例; Integer
相当于Integer()
,在这种情况下没有构造参数。
泛型类型指定一个可以读取,写入和存储特定类型的Python数据的列。发布CREATE TABLE
语句时,SQLAlchemy将选择目标数据库上可用的最佳数据库列类型。为了完全控制哪些列类型在CREATE TABLE
中发出,例如VARCHAR
,请参阅`SQL Standard Types`_和本章的其他部分。
sqlalchemy.types。
布尔
( create_constraint = True,名称=无,_create_events = True ) ¶基础:sqlalchemy.types.TypeEngine
,sqlalchemy.types.SchemaType
一个bool数据类型。
布尔值通常在DDL端使用BOOLEAN或SMALLINT,而在Python端则使用True
或False
。
sqlalchemy.types.
Date
¶基础:sqlalchemy.types._DateAffinity
,sqlalchemy.types.TypeEngine
datetime.date()
对象的类型。
sqlalchemy.types。
DateTime
( timezone = False / T5> ¶ T6>基础:sqlalchemy.types._DateAffinity
,sqlalchemy.types.TypeEngine
datetime.datetime()
对象的类型。
日期和时间类型从Python datetime
模块返回对象。大多数DBAPI都支持datetime模块,除了SQLite之外。对于SQLite,日期和时间类型存储为字符串,然后在返回行时将其转换回日期时间对象。
sqlalchemy.types。
Enum
( * enums,**千瓦 T5> ) T6> ¶ T7>基础:sqlalchemy.types.String
,sqlalchemy.types.SchemaType
通用枚举类型。
Enum
类型提供了该列所限制的一组可能的字符串值。
如果可用的话,Enum
类型将使用后端的本机“ENUM”类型;否则,它使用VARCHAR数据类型并生成CHECK约束。可以使用Enum.native_enum
标志禁用后端本机枚举类型,并且可以使用Enum.create_constraint
标志配置CHECK约束的生成。
Enum
类型还提供对输入值和数据库返回值的Python验证。对于任何不在可能值的给定列表中的Python值,都会引发LookupError
。
在版本1.1中更改:现在,Enum
类型提供输入值的Python验证以及数据库返回的数据。
枚举值的来源可能是字符串值列表,或者是符合PEP-435标准的枚举类。对于Enum
数据类型,这个类只需要提供一个__members__
方法。
在使用枚举类时,枚举对象既用于输入又用于输出,而不是像普通字符串枚举类型那样使用字符串:
import enum
class MyEnum(enum.Enum):
one = "one"
two = "two"
three = "three"
t = Table(
'data', MetaData(),
Column('value', Enum(MyEnum))
)
connection.execute(t.insert(), {"value": MyEnum.two})
assert connection.scalar(t.select()) is MyEnum.two
版本1.1中的新功能: - 支持PEP-435风格的枚举类。
也可以看看
ENUM
- 特定于PostgreSQL的类型,它具有附加功能。
__ init __
( * enums,** kw ) T5>构造一个枚举。
不适用于特定后端的关键字参数将被该后端忽略。
参数: |
|
---|
create
(bind=None, checkfirst=False)¶create()
method of SchemaType
为此类型发出CREATE ddl(如果适用)。
drop
(bind=None, checkfirst=False)¶drop()
method of SchemaType
为此类型发布DROP ddl(如果适用)。
sqlalchemy.types。
浮动
( 精度=无,asdecimal = False,decimal_return_scale = None,** kwargs ) ¶表示浮点类型的类型,例如FLOAT
或REAL
。
除非Float.asdecimal
标志设置为True,否则这种类型默认返回Python float
对象,在这种情况下,它们被强制转换为decimal.Decimal
注意
Float
类型用于接收来自明确已知为浮点类型的数据库类型的数据(例如,FLOAT
,REAL
,其他)而不是小数类型(例如DECIMAL
,NUMERIC
等)。If the database column on the server is in fact a Numeric type, such as DECIMAL
or NUMERIC
, use the Numeric
type or a subclass, otherwise numeric coercion between float
/Decimal
may or may not function as expected.
__init__
(precision=None, asdecimal=False, decimal_return_scale=None, **kwargs)¶构建一个浮动。
参数: |
|
---|
sqlalchemy.types。
整数
¶基础:sqlalchemy.types._DateAffinity
,sqlalchemy.types.TypeEngine
一个用于int
整数的类型。
sqlalchemy.types.
Interval
(native=True, second_precision=None, day_precision=None)¶基础:sqlalchemy.types._DateAffinity
,sqlalchemy.types.TypeDecorator
datetime.timedelta()
对象的类型。
Interval类型处理datetime.timedelta
对象。在PostgreSQL中,使用本地INTERVAL
类型;对于其他人而言,价值被存储为相对于“时代”(1970年1月1日)的日期。
请注意,Interval
类型当前不在本机不支持间隔类型的平台上提供日期算术运算。这样的操作通常需要将表达式的两侧(例如,首先将两侧转换为整数时间值)进行转换,该转换当前是手动过程(例如通过func
)。
__ init __
( native = True,second_precision = None,day_precision = None ) T5> ¶ T6>构造一个Interval对象。
参数: |
|
---|
coerce_compared_value
( op,值 ) 有关说明,请参阅TypeEngine.coerce_compared_value()
。
sqlalchemy.types。
LargeBinary
( length = None / T5> ¶ T6>基础:sqlalchemy.types._Binary
一种大型二进制字节数据的类型。
The LargeBinary
type corresponds to a large and/or unlengthed binary type for the target platform, such as BLOB on MySQL and BYTEA for Postgresql. 它还处理DBAPI的必要转换。
sqlalchemy.types。
MatchType
( create_constraint = True,=无,_create_events = True ) ¶指MATCH运算符的返回类型。
As the ColumnOperators.match()
is probably the most open-ended operator in generic SQLAlchemy Core, we can’t assume the return type at SQL evaluation time, as MySQL returns a floating point, not a boolean, and other backends might do something different. 所以这个类型作为一个占位符,当前继承Boolean
。该类型允许方言根据需要注入结果处理功能,并在MySQL上返回浮点值。
版本1.0.0中的新功能
sqlalchemy.types.
Numeric
(precision=None, scale=None, decimal_return_scale=None, asdecimal=True)¶基础:sqlalchemy.types._DateAffinity
,sqlalchemy.types.TypeEngine
用于固定精度数字的类型,例如NUMERIC
或DECIMAL
。
除非Numeric.asdecimal
标志设置为False,否则这种类型默认返回Python decimal.Decimal
对象,在这种情况下,它们被强制为Python float
注意
Numeric
类型用于从明确知道为十进制类型的数据库类型(例如DECIMAL
,NUMERIC
等)接收数据。而不是浮点类型(例如FLOAT
,REAL
,其他)。如果服务器上的数据库列实际上是浮点类型类型,如FLOAT
或REAL
,则使用Float
类型或a子类,否则float
/ Decimal
之间的数字强制可能会或可能不会按预期运行。
注意
Python decimal.Decimal
类通常运行缓慢; cPython 3.3现在已经切换到本地使用cdecimal库。对于较老的Python版本,可以将cdecimal
库修补到任何将完全替换decimal
库的应用程序中,但是这需要全局应用,并且在任何其他模块已被导入,如下所示:
import sys
import cdecimal
sys.modules["decimal"] = cdecimal
请注意,cdecimal
和decimal
库彼此不兼容,因此在全局级别修补cdecimal
它可以有效地用于硬编码导入decimal
库的各种DBAPI。
__init__
(precision=None, scale=None, decimal_return_scale=None, asdecimal=True)¶构建一个数字。
参数: |
|
---|
当使用Numeric
类型时,应注意确保asdecimal设置适用于正在使用的DBAPI - 当Numeric应用从Decimal-> float或float-> Decimal的转换时,此转换会发生所有结果列的额外性能开销。
原生返回Decimal的DBAPI(例如psycopg2)的设置为True
将具有更高的准确性和更高的性能,因为Decimal的本地转换减少了游戏中浮点问题的数量,而Numeric类型本身不需要应用任何进一步的转换。然而,另一个返回本地浮动的DBAPI会产生额外的转换开销,并且仍然会受到浮点数据丢失的影响 - 在这种情况下,asdecimal=False
至少会移除额外的转换开销。
sqlalchemy.types.
PickleType
(protocol=2, pickler=None, comparator=None)¶基础:sqlalchemy.types.TypeDecorator
保存使用pickle序列化的Python对象。
PickleType建立在二进制类型之上,用于将Python的pickle.dumps()
应用于传入对象,pickle.loads()
允许任何可选择的Python对象成为存储为一个序列化的二进制字段。
要允许ORM更改事件传播与PickleType
关联的元素,请参阅Mutation Tracking。
__init__
(protocol=2, pickler=None, comparator=None)¶构建一个PickleType。
参数: |
---|
IMPL T0> ¶ T1>
LargeBinary
的别名
sqlalchemy.types。
SchemaType
( name = None,= None,metadata = None,inherit_schema = False,quote =无,_create_events = True ) T10> ¶ T11>基础:sqlalchemy.sql.expression.SchemaEventTarget
将某个类型标记为可能需要使用架构级别的DDL。
支持必须显式创建/删除的类型(即PG ENUM类型)以及由表或模式级别约束,触发器和其他规则所赞扬的类型。
SchemaType
classes can also be targets for the DDLEvents.before_parent_attach()
and DDLEvents.after_parent_attach()
events, where the events fire off surrounding the association of the type object with a parent Column
.
adapt
(impltype, **kw)¶结合 T0> ¶ T1>
复制 T0> ( T1> **千瓦 T2> ) T3> ¶ T4>
create
(bind=None, checkfirst=False)¶为此类型发出CREATE ddl(如果适用)。
drop
(bind=None, checkfirst=False)¶为此类型发布DROP ddl(如果适用)。
sqlalchemy.types。
字符串
( length =无,= None,convert_unicode = False,unicode_error = None,_warn_on_bytestring = False ) ¶ T10>基础:sqlalchemy.types.Concatenable
,sqlalchemy.types.TypeEngine
所有字符串和字符类型的基础。
在SQL中,对应于VARCHAR。也可以采用Python unicode对象,并在绑定参数中对数据库的编码进行编码(结果集相反)。
当在CREATE TABLE语句中使用String类型时,通常需要长度字段,因为VARCHAR在大多数数据库上需要长度。
__init__
(length=None, collation=None, convert_unicode=False, unicode_error=None, _warn_on_bytestring=False)¶创建一个字符串保存类型。
参数: |
|
---|
sqlalchemy.types。
Text
( length = None,= None,convert_unicode = False,unicode_error = None,_warn_on_bytestring = False ) ¶ T10>可变大小的字符串类型。
在SQL中,通常对应于CLOB或TEXT。也可以采用Python unicode对象,并在绑定参数中对数据库的编码进行编码(结果集相反)。通常,TEXT对象没有长度;而一些数据库在这里会接受一个长度的参数,它会被别人拒绝。
sqlalchemy.types。
Time
( timezone = False / T5> ¶ T6>基础:sqlalchemy.types._DateAffinity
,sqlalchemy.types.TypeEngine
datetime.time()
对象的类型。
sqlalchemy.types。
Unicode
( length = None,* * kwargs T5> ) T6> ¶ T7>一个可变长度的Unicode字符串类型。
The Unicode
type is a String
subclass that assumes input and output as Python unicode
data, and in that regard is equivalent to the usage of the convert_unicode
flag with the String
type. 但是,与plain String
不同,它还意味着一种基本列类型,它明确支持非ASCII数据,例如Oracle和SQL Server上的NVARCHAR
。This can impact the output of CREATE TABLE
statements and CAST
functions at the dialect level, and can also affect the handling of bound parameters in some specific DBAPI scenarios.
由Unicode
类型使用的编码通常由DBAPI本身决定;大多数现代的DBAPI都支持Python unicode
对象作为绑定值和结果集值,编码应该在Dialects部分的目标DBAPI注释中详细说明。 。
对于那些不支持或未配置为直接适应Python unicode
对象的DBAPI,SQLAlchemy会在DBAPI之外进行编码和解码。此场景中的编码由传递给create_engine()
的encoding
标志确定。
使用Unicode
类型时,仅适用于传递Python unicode
对象,而不是str
。如果在Python 2下传递一个普通的str
,则会发出警告。如果您注意到您的应用程序发出这些警告,但您不确定它们的来源,请参阅http://docs.python.org/library/warnings上的Python warnings
过滤器。 .html可用于将这些警告转化为例外,它将说明堆栈跟踪:
import warnings
warnings.simplefilter('error')
对于希望平等传递字节串和Python unicode
对象至Unicode
类型的应用程序,字节串必须先解码为unicode。将Coercing Encoded Strings to Unicode的配方说明了这是如何完成的。
也可以看看:
UnicodeText
- 与Unicode
不相容的文本对应。
sqlalchemy.types。
UnicodeText
( length = None,* * kwargs T5> ) T6> ¶ T7>无限长的Unicode字符串类型。
有关此对象的Unicode特性的详细信息,请参阅Unicode
。
像Unicode
一样,UnicodeText
类型的用法意味着在后端使用了能够使用unicode的类型,例如NCLOB
,NTEXT
此类型的类型是指属于SQL标准一部分的类型,或可能在数据库后端子集中找到的类型。Unlike the “generic” types, the SQL standard/multi-vendor types have no guarantee of working on all backends, and will only work on those backends that explicitly support them by name. 也就是说,类型将始终使用CREATE TABLE
发布DDL中的确切名称。
sqlalchemy.types。
ARRAY
( item_type,as_tuple = False dimensions = None,zero_indexes = False ) ¶基础:sqlalchemy.types.Indexable
,sqlalchemy.types.Concatenable
,sqlalchemy.types.TypeEngine
表示一个SQL数组类型。
注意
这种类型是所有ARRAY操作的基础。但是,目前只有Postgresql后端支持SQLAlchemy中的SQL数组。建议在使用PostgreSQL的ARRAY类型时直接使用postgresql.ARRAY
类型,因为它提供了特定于该后端的其他运算符。
types.ARRAY
是支持各种SQL标准函数(如显式涉及数组的array_agg
)的Core的一部分;但是,除PostgreSQL后端和可能的某些第三方方言外,其他SQLAlchemy内置方言不支持此类型。
给定元素的“类型”构造types.ARRAY
类型:
mytable = Table("mytable", metadata,
Column("data", ARRAY(Integer))
)
上面的类型表示一个N维数组,意味着支持的后端(如Postgresql)将自动解释具有任意数量维的值。为了生成一个传入一维整数数组的INSERT构造:
connection.execute(
mytable.insert(),
data=[1,2,3]
)
types.ARRAY
类型可以给定固定数量的维度:
mytable = Table("mytable", metadata,
Column("data", ARRAY(Integer, dimensions=2))
)
发送多个维度是可选的,但建议如果数据类型代表多个维度的数组。这个数字用于:
当向数据库发送类型声明本身时,例如INTEGER[][]
在将Python值转换为数据库值时,反之亦然,例如一个Unicode
对象的ARRAY使用此数字来高效地访问数组结构中的字符串值,而无需依靠每行类型检查
当与Python getitem
访问器一起使用时,维数用于定义[]
运算符应返回的类型的类型。对于具有两个维度的INTEGER阵列:
>>> expr = table.c.column[5] # returns ARRAY(Integer, dimensions=1)
>>> expr = expr[6] # returns Integer
对于一维数组,一个没有维度参数的types.ARRAY
实例通常会假定为单维行为。
类型types.ARRAY
的SQL表达式支持“索引”和“切片”行为。在给定整数索引或切片的情况下,Python []
运算符正常工作。数组默认为基于1的索引。运算符生成二进制表达式结构,这将为SELECT语句生成适当的SQL:
select([mytable.c.data[5], mytable.c.data[2:7]])
以及使用Update.values()
方法时的UPDATE语句:
mytable.update().values({
mytable.c.data[5]: 7,
mytable.c.data[2:7]: [1, 2, 3]
})
types.ARRAY
类型还为运算符types.ARRAY.Comparator.any()
和types.ARRAY.Comparator.all()
。PostgreSQL特定版本的types.ARRAY
也提供了额外的操作符。
版本1.1.0中的新功能
也可以看看
比较器
( expr ) ¶基础:sqlalchemy.types.Comparator
,sqlalchemy.types.Comparator
定义types.ARRAY
的比较操作。
这种类型的方言特定形式提供了更多的运算符。参见postgresql.ARRAY.Comparator
。
全部
( 其他,运营商=无 ) t5 >返回其他 运算符 ALL (数组)
子句。
参数的地方被切换,因为ALL要求数组表达式在右侧。
例如。:
from sqlalchemy.sql import operators
conn.execute(
select([table.c.data]).where(
table.c.data.all(7, operator=operators.lt)
)
)
参数: |
---|
任何
( 其他,运营商=无 ) t5 >返回其他 运算符 ANY (数组)
子句。
参数的位置被切换,因为ANY要求数组表达式在右侧。
例如。:
from sqlalchemy.sql import operators
conn.execute(
select([table.c.data]).where(
table.c.data.any(7, operator=operators.lt)
)
)
参数: |
---|
ARRAY tt> __ init __
( item_type,as_tuple = False,dimensions =无,zero_indexes = False ) ¶
构建types.ARRAY
。
例如。:
Column('myarray', ARRAY(Integer))
参数是:
参数: |
|
---|
ARRAY。 T0> comparator_factory T1> ¶ T2>
Comparator
的别名
ARRAY。
zero_indexes
= False ¶如果为True,则Python基于零的索引应该在SQL表达式一侧解释为基于一。
sqlalchemy.types。
BIGINT
¶基础:sqlalchemy.types.BigInteger
SQL BIGINT类型。
sqlalchemy.types。
BINARY
( length = None / T5> ¶ T6>基础:sqlalchemy.types._Binary
SQL BINARY类型。
sqlalchemy.types。
BLOB
( length = None / T5> ¶ T6>基础:sqlalchemy.types.LargeBinary
SQL BLOB类型。
sqlalchemy.types.
BOOLEAN
(create_constraint=True, name=None, _create_events=True)¶SQL BOOLEAN类型。
sqlalchemy.types。
CHAR
( length = None,= None,convert_unicode = False,unicode_error = None,_warn_on_bytestring = False ) ¶ T10>SQL CHAR类型。
sqlalchemy.types。
CLOB
( length =无,= None,convert_unicode = False,unicode_error = None,_warn_on_bytestring = False ) ¶ T10>CLOB类型。
这种类型可以在Oracle和Informix中找到。
sqlalchemy.types.
DATE
¶SQL DATE类型。
sqlalchemy.types.
DATETIME
(timezone=False)¶SQL DATETIME类型。
sqlalchemy.types.
DECIMAL
(precision=None, scale=None, decimal_return_scale=None, asdecimal=True)¶SQL DECIMAL类型。
sqlalchemy.types.
FLOAT
(precision=None, asdecimal=False, decimal_return_scale=None, **kwargs)¶SQL FLOAT类型。
sqlalchemy.types。
JSON
( none_as_null = False / T5> ¶ T6>基础:sqlalchemy.types.Indexable
,sqlalchemy.types.TypeEngine
表示一个SQL JSON类型。
注意
types.JSON
作为特定于供应商的JSON类型的外观提供。由于它支持JSON SQL操作,因此它只适用于具有实际JSON类型的后端,目前Postgresql以及某些版本的MySQL。
types.JSON
是Core的一部分,以支持原生JSON数据类型日益普及。
types.JSON
类型存储任意的JSON格式数据,例如:
data_table = Table('data_table', metadata,
Column('id', Integer, primary_key=True),
Column('data', JSON)
)
with engine.connect() as conn:
conn.execute(
data_table.insert(),
data = {"key1": "value1", "key2": "value2"}
)
基础types.JSON
提供了这两个操作:
键控索引操作:
data_table.c.data['some key']
整数索引操作:
data_table.c.data[3]
路径索引操作:
data_table.c.data[('key_1', 'key_2', 5, ..., 'key_n')]
额外的操作可以从types.JSON
特定于方言的版本中找到,如postgresql.JSON
和postgresql.JSONB
,其中每个都可以提供比基本类型更多的操作员。
索引操作默认返回一个默认类型默认为JSON
的表达式对象,这样可以根据结果类型调用更多的面向JSON的指令。
当与SQLAlchemy ORM一起使用时,JSON
类型不检测结构的就地突变。为了检测这些,必须使用sqlalchemy.ext.mutable
扩展名。该扩展将允许对数据结构进行“就地”更改以产生将由工作单元检测到的事件。有关字典的简单示例,请参阅HSTORE
中的示例。
当使用NULL值时,JSON
类型建议使用两个特定常量来区分求值为SQL NULL的列,例如没有值,与"null"
。要插入或选择一个SQL NULL值,请使用常量null()
:
from sqlalchemy import null
conn.execute(table.insert(), json_value=null())
要插入或选择一个值为JSON "null"
的值,请使用常量JSON.NULL
:
conn.execute(table.insert(), json_value=JSON.NULL)
JSON
类型支持一个标记JSON.none_as_null
,当设置为True时,将导致Python常量None
评估为SQL NULL的值,并且设置为False时,会导致Python常量None
求值为JSON "null"
。为了指示NULL值,Python值None
可以与JSON.NULL
和null()
结合使用,但必须小心在这些情况下取决于JSON.none_as_null
的值。
版本1.1中的新功能
比较器
( expr ) ¶基础:sqlalchemy.types.Comparator
,sqlalchemy.types.Comparator
定义types.JSON
的比较操作。
JSON。
JSONIndexType
¶基础:sqlalchemy.types.TypeEngine
JSON索引值的数据类型的占位符。
这允许执行时处理JSON索引值以获取特殊语法。
JSON。
JSONPathType
¶基础:sqlalchemy.types.TypeEngine
JSON路径操作的占位符类型。
这允许将基于路径的索引值执行时处理为特定的SQL语法。
JSON。
NULL
=符号('JSON_NULL') ¶描述NULL的json值。
该值用于强制使用"null"
的JSON值作为值。根据JSON.none_as_null
标志的设置,Python None
的值将被识别为SQL NULL或JSON "null"
无论此设置如何,都可以使用JSON.NULL
常量来解析为JSON "null"
。这与sql.null()
结构形成对比,该结构始终解析为SQL NULL。例如。:
from sqlalchemy import null
from sqlalchemy.dialects.postgresql import JSON
obj1 = MyObject(json_value=null()) # will *always* insert SQL NULL
obj2 = MyObject(json_value=JSON.NULL) # will *always* insert JSON string "null"
session.add_all([obj1, obj2])
session.commit()
JSON。 T0> __初始化__ T1> ( T2> none_as_null =假 T3> ) T4> ¶ T5 >
构造一个types.JSON
类型。
参数: | none_as_null = False ¶ - 如果为True,则将值 from sqlalchemy import null
conn.execute(table.insert(), data=null()) 也可以看看 |
---|
JSON。 T0> comparator_factory T1> ¶ T2>
Comparator
的别名
sqlalchemy.types.
INTEGER
¶SQL INT或INTEGER类型。
sqlalchemy.types。
NCHAR
( length = None,* * kwargs T5> ) T6> ¶ T7>SQL NCHAR类型。
sqlalchemy.types。
NVARCHAR
( length = None,* * kwargs T5> ) T6> ¶ T7>SQL NVARCHAR类型。
sqlalchemy.types.
NUMERIC
(precision=None, scale=None, decimal_return_scale=None, asdecimal=True)¶SQL NUMERIC类型。
sqlalchemy.types。
REAL
( precision = None,asdecimal = False,decimal_return_scale = None,** kwargs ) ¶SQL REAL类型。
sqlalchemy.types。
SMALLINT
¶基础:sqlalchemy.types.SmallInteger
SQL SMALLINT类型。
sqlalchemy.types.
TEXT
(length=None, collation=None, convert_unicode=False, unicode_error=None, _warn_on_bytestring=False)¶SQL TEXT类型。
sqlalchemy.types.
TIME
(timezone=False)¶SQL TIME类型。
sqlalchemy.types。
TIMESTAMP
( timezone = False / T5> ¶ T6>SQL TIMESTAMP类型。
sqlalchemy.types。
VARBINARY
( length = None / T5> ¶ T6>基础:sqlalchemy.types._Binary
SQL VARBINARY类型。
sqlalchemy.types。
VARCHAR
( length =无,= None,convert_unicode = False,unicode_error = None,_warn_on_bytestring = False ) ¶ T10>SQL VARCHAR类型。
数据库特定类型也可用于从每个数据库的方言模块导入。请参阅您感兴趣的数据库的Dialects参考。
例如,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类型最终来自sqlalchemy.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'))
)