SQLAlchemy通过现代版本支持从4.1版本开始的MySQL。但是,如果您的服务器版本不支持子选择,则不会采取英雄措施解决主要缺失的SQL功能,例如,它们也不会在SQLAlchemy中工作。
有关任何给定服务器版本中支持的功能的详细信息,请参阅官方的MySQL文档。
MySQL具有自动连接关闭行为,适用于闲置八小时或更长时间的连接。为了避免发生此问题,请使用控制任何连接的最大使用期限的pool_recycle
选项:
engine = create_engine('mysql+mysqldb://...', pool_recycle=3600)
也可以看看
Setting Pool Recycle - 池回收功能的完整说明。
MySQL’s CREATE TABLE syntax includes a wide array of special options, including ENGINE
, CHARSET
, MAX_ROWS
, ROW_FORMAT
, INSERT_METHOD
, and many more. 要适应这些参数的呈现,请指定mysql_argument_name="value"
形式。For example, to specify a table with ENGINE
of InnoDB
, CHARSET
of utf8
, and KEY_BLOCK_SIZE
of 1024
:
Table('mytable', metadata,
Column('data', String(32)),
mysql_engine='InnoDB',
mysql_charset='utf8',
mysql_key_block_size="1024"
)
MySQL方言通常会将指定为mysql_keyword_name
的任何关键字转换成CREATE TABLE中的
语句。A handful of these names will render with a space instead of an underscore; to support this, the MySQL dialect has awareness of these particular names, which include KEYWORD_NAME
>DATA DIRECTORY
(e.g. mysql_data_directory
), CHARACTER SET
(e.g. mysql_character_set
) and INDEX DIRECTORY
(e.g. mysql_index_directory
).
最常见的参数是mysql_engine
,它引用表的存储引擎。从历史上看,MySQL服务器安装默认为MyISAM
,尽管新版本可能默认为InnoDB
。The InnoDB
engine is typically preferred for its support of transactions and foreign keys.
在具有MyISAM
存储引擎的MySQL数据库中创建的Table
将基本上是非事务性的,这意味着引用此表的任何INSERT / UPDATE / DELETE语句将是被调用为自动提交。它也不会支持外键约束;而当使用MyISAM
存储引擎时,CREATE TABLE
语句接受外键选项,这些参数将被丢弃。反映这样的表格也不会产生外键约束信息。
For fully atomic transactions as well as support for foreign key constraints, all participating CREATE TABLE
statements must specify a transactional engine, which in the vast majority of cases is InnoDB
.
也可以看看
InnoDB存储引擎 - 在MySQL网站上。
MySQL对区分大小写的标识符名称提供了不一致的支持,基于对底层操作系统特定细节的支持。然而,据观察,无论出现什么样的大小写敏感性行为,外键声明中的表名都始终是总是从数据库接收为全小写,因此无法准确反映架构中相互关联的表使用混合大小写标识符名称。
因此,强烈建议在SQLAlchemy以及MySQL数据库本身中声明表名全部小写,尤其是在要使用数据库反射功能的情况下。
All MySQL dialects support setting of transaction isolation level both via a dialect-specific parameter create_engine.isolation_level
accepted by create_engine()
, as well as the Connection.execution_options.isolation_level
argument as passed to Connection.execution_options()
. This feature works by issuing the command SET SESSION TRANSACTION ISOLATION LEVEL <level>
for each new connection. 对于特殊的AUTOCOMMIT隔离级别,使用了特定于DBAPI的技术。
使用create_engine()
设置隔离级别:
engine = create_engine(
"mysql://scott:tiger@localhost/test",
isolation_level="READ UNCOMMITTED"
)
要设置使用每个连接执行选项:
connection = engine.connect()
connection = connection.execution_options(
isolation_level="READ COMMITTED"
)
isolation_level
的有效值包括:
READ COMMITTED
READ UNCOMMITTED
REPEATABLE READ
SERIALIZABLE
AUTOCOMMIT
特殊的AUTOCOMMIT
值使用特定DBAPI提供的各种“autocommit”属性,目前支持MySQLdb,MySQL-Client,MySQL-Connector Python和PyMySQL。使用它,MySQL连接将对SELECT @@ autocommit;
的值返回true。
1.1版新增功能: - 增加了对AUTOCOMMIT隔离级别的支持。
创建表时,SQLAlchemy将在未标记为外键的第一个Integer
主键列上自动设置AUTO_INCREMENT
:
>>> t = Table('mytable', metadata,
... Column('mytable_id', Integer, primary_key=True)
... )
>>> t.create()
CREATE TABLE mytable (
id INTEGER NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
)
您可以通过将False
传递给Column
的autoincrement
参数来禁用此行为。此标志还可用于启用某些存储引擎的多列键中辅助列的自动递增:
Table('mytable', metadata,
Column('gid', Integer, primary_key=True, autoincrement=False),
Column('id', Integer, primary_key=True)
)
大多数MySQL DBAPI提供了为连接设置客户端字符集的选项。这通常通过URL中的charset
参数提供,例如:
e = create_engine("mysql+pymysql://scott:tiger@localhost/test?charset=utf8")
这个字符集是连接的客户端字符集。Some MySQL DBAPIs will default this to a value such as latin1
, and some will make use of the default-character-set
setting in the my.cnf
file as well. 应该查阅正在使用的DBAPI的文档以了解具体行为。
用于Unicode的编码传统上是'utf8'
。但是,对于正向版本的MySQL 5.5.3,引入了一个新的特定于MySQL的编码'utf8mb4'
。这种新编码的基本原理是由于MySQL的utf-8编码仅支持最多三个字节而不是四个的码位。因此,当与包含三个字节以上的代码点的MySQL数据库进行通信时,如果数据库和客户端DBAPI都支持,则这个新的字符集是首选的,如下所示:
e = create_engine("mysql+pymysql://scott:tiger@localhost/test?charset=utf8mb4")
目前,MySQLdb和PyMySQL的最新版本支持utf8mb4
字符集。其他DBAPI如MySQL-Connector和OurSQL可能不能支持它。
为了使用utf8mb4
编码,可能需要更改MySQL架构和/或服务器配置。
也可以看看
utf8mb4字符集 - 在MySQL文档中
所有现代的MySQL DBAPI都提供了在Python应用程序空间和数据库之间处理unicode数据编码和解码的服务。由于情况并非总是如此,SQLAlchemy还包含一个执行编码/解码任务的综合系统。由于这些系统中只有一个应该在使用,SQLAlchemy长期以来包含了在第一次连接时自动检测DBAPI是否自动处理unicode的功能。
MySQL DBAPI是否处理编码通常可以使用DBAPI标志use_unicode
进行配置,该标志至少已被MySQLdb,PyMySQL和MySQL-Connector支持。在“connect args”或查询字符串中将此值设置为0
将导致禁用DBAPI处理unicode的效果,例如,它将返回str
类型或bytes
类型,数据在配置的字符集中:
# connect while disabling the DBAPI's unicode encoding/decoding
e = create_engine("mysql+mysqldb://scott:tiger@localhost/test?charset=utf8&use_unicode=0")
目前对现代DBAPI的建议如下:
use_unicode
标志设置为其默认值通常总是安全的;也就是说,根本不要使用它。use_unicode=0
标志应该永远不会被使用。Python 3下的SQLAlchemy通常假定DBAPI接收并返回字符串值,如Python 3字符串,它本质上是unicode对象。use_unicode=0
标志将提供卓越的性能,因为与SQLAlchemy的快速性相比,MySQLdb的Python 2下的unicode转换器仅被观察到异常缓慢的性能基于C的编码器/解码器。简而言之:不要在所有的中指定use_unicode
,并且Python 2 的MySQLdb上的use_unicode=0
/ t5>以获得潜在的性能增益。
MySQL features two varieties of identifier “quoting style”, one using backticks and the other using quotes, e.g. `some_identifier`
vs. "some_identifier"
. 当首次建立与特定Engine
的连接时,所有MySQL方言通过检查sql_mode
的值来检测正在使用哪个版本。这种引用风格在呈现表名和列名以及反映现有数据库结构时起作用。检测是完全自动的,不需要使用任何引用样式的特殊配置。
在版本0.6中更改:检测ANSI引用样式是完全自动的,在这方面不再有任何最终用户create_engine()
选项。
许多MySQL SQL扩展都是通过SQLAlchemy的通用函数和运算符支持来处理的:
table.select(table.c.password==func.md5('plaintext'))
table.select(table.c.username.op('regexp')('^[a-d]'))
当然,任何有效的MySQL语句也可以作为字符串执行。
目前有一些对SQL扩展的有限直接支持。
SELECT杂注:
select(..., prefixes=['HIGH_PRIORITY', 'SQL_SMALL_RESULT'])
更新与限制:
update(..., mysql_limit=10)
SQLAlchemy将DBAPI cursor.rowcount
属性标准化为“UPDATE或DELETE匹配的行数”的通常定义。这与大多数MySQL DBAPI驱动程序的默认设置相矛盾,即“实际修改/删除的行数”。因此,SQLAlchemy MySQL方言总是在连接时添加constants.CLIENT.FOUND_ROWS
标志或任何等同于目标方言的标志。此设置目前是硬编码的。
也可以看看
MySQL将文档CAST操作符记录在版本4.0.2中。当使用SQLAlchemy cast()
函数时,基于服务器版本检测,SQLAlchemy将不会在此版本之前在MySQL上呈现CAST标记,而是直接渲染内部表达式。
在早期的MySQL版本4.0.2之后,CAST可能仍然不可取,因为在4.1.1之前它没有添加所有的数据类型支持。如果您的应用程序属于这个狭窄区域,则可以使用Custom SQL Constructs and Compilation Extension系统按照以下配方来控制CAST的行为:
from sqlalchemy.sql.expression import Cast
from sqlalchemy.ext.compiler import compiles
@compiles(Cast, 'mysql')
def _check_mysql_version(element, compiler, **kw):
if compiler.dialect.server_version_info < (4, 1, 0):
return compiler.process(element.clause, **kw)
else:
return compiler.visit_cast(element, **kw)
上述函数只需要在应用程序中声明一次,就会覆盖编译cast()
结构以在完全呈现CAST之前检查版本4.1.0;否则直接渲染构造的内部元素。
针对Index
结构的特定于MySQL的扩展可用。
MySQL提供了创建具有一定长度的索引条目的选项,其中“length”是指每个值中将成为索引一部分的字符或字节数。SQLAlchemy通过mysql_length
参数提供此功能:
Index('my_index', my_table.c.data, mysql_length=10)
Index('a_b_idx', my_table.c.a, my_table.c.b, mysql_length={'a': 4,
'b': 9})
对于非二进制字符串类型,前缀长度以字符给出,二进制字符串类型以字节给出。传递给关键字参数的值必须是或者是一个整数(因此,为索引的所有列指定相同的前缀长度值)或者一个字典中的列名称和值是前缀相应列的长度值。如果是CHAR,VARCHAR,TEXT,BINARY,VARBINARY和BLOB,MySQL只允许索引列的长度。
0.8.2版中的新功能 mysql_length
现在可以被指定为与组合索引一起使用的字典。
某些MySQL存储引擎允许您在创建索引或主键约束时指定索引类型。SQLAlchemy通过Index
上的mysql_using
参数提供此功能:
Index('my_index', my_table.c.data, mysql_using='hash')
以及PrimaryKeyConstraint
上的mysql_using
参数:
PrimaryKeyConstraint("data", mysql_using='hash')
The value passed to the keyword argument will be simply passed through to the underlying CREATE INDEX or PRIMARY KEY clause, so it must be a valid index type for your MySQL storage engine.
有关更多信息,请访问:
http://dev.mysql.com/doc/refman/5.0/en/create-index.html T0>
http://dev.mysql.com/doc/refman/5.0/en/create-table.html T0>
MySQL关于外键的行为有一些重要的注意事项。
MySQL不支持外键参数“DEFERRABLE”,“INITIALLY”或“MATCH”。对ForeignKeyConstraint
或ForeignKey
使用deferrable
或initially
关键字参数将会产生这些关键字在DDL表达式,这会在MySQL上引发错误。为了在外键上使用这些关键字,同时让它们在MySQL后端上被忽略,请使用自定义编译规则:
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.schema import ForeignKeyConstraint
@compiles(ForeignKeyConstraint, "mysql")
def process(element, compiler, **kw):
element.deferrable = element.initially = None
return compiler.visit_foreign_key_constraint(element, **kw)
Changed in version 0.9.0: - the MySQL backend no longer silently ignores the deferrable
or initially
keyword arguments of ForeignKeyConstraint
and ForeignKey
.
“MATCH”关键字实际上更加隐蔽,并且被SQLAlchemy与MySQL后端结合在一起明确地禁止。这个参数被MySQL默默地忽略,但是另外有ON UPDATE和ON DELETE选项也被后端忽略。因此MATCH不应该与MySQL后端一起使用;与DEFERRABLE和INITIALLY一样,自定义编译规则可用于在DDL定义时更正MySQL ForeignKeyConstraint。
New in version 0.9.0: - the MySQL backend will raise a CompileError
when the match
keyword is used with ForeignKeyConstraint
or ForeignKey
.
并非所有的MySQL存储引擎都支持外键。When using the very common MyISAM
MySQL storage engine, the information loaded by table reflection will not include foreign keys. 对于这些表,您可以在反射时提供ForeignKeyConstraint
:
Table('mytable', metadata,
ForeignKeyConstraint(['other_id'], ['othertable.other_id']),
autoload=True
)
SQLAlchemy支持带有标志unique=True
的Index
结构,表示一个UNIQUE索引以及UniqueConstraint
结构,表示一个UNIQUE约束。当发出DDL来创建这些约束时,MySQL支持这两种对象/语法。但是,MySQL没有独特的约束结构,它与独特的索引是分开的;也就是说,MySQL上的“UNIQUE”约束等同于创建“UNIQUE INDEX”。
当反映这些结构时,Inspector.get_indexes()
和Inspector.get_unique_constraints()
方法都会返回一个UNIQUE索引的条目MySQL的。However, when performing full table reflection using Table(..., autoload=True)
, the UniqueConstraint
construct is not part of the fully reflected Table
construct under any circumstances; this construct is always represented by a Index
with the unique=True
setting present in the Table.indexes
collection.
MySQL在历史上强制指定TIMESTAMP数据类型的列隐式地包含缺省值CURRENT_TIMESTAMP,尽管没有说明,并且另外将列设置为NOT NULL,与所有其他数据类型相反:
mysql> CREATE TABLE ts_test (
-> a INTEGER,
-> b INTEGER NOT NULL,
-> c TIMESTAMP,
-> d TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-> e TIMESTAMP NULL);
Query OK, 0 rows affected (0.03 sec)
mysql> SHOW CREATE TABLE ts_test;
+---------+-----------------------------------------------------
| Table | Create Table
+---------+-----------------------------------------------------
| ts_test | CREATE TABLE `ts_test` (
`a` int(11) DEFAULT NULL,
`b` int(11) NOT NULL,
`c` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`d` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`e` timestamp NULL DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
在上面,我们看到INTEGER列默认为NULL,除非它用NOT NULL指定。但是,当列的类型为TIMESTAMP时,会生成CURRENT_TIMESTAMP的隐式缺省值,这也会强制该列成为NOT NULL,即使我们没有这样指定它。
MySQL的这种行为可以使用MySQL 5.6中引入的explicit_defaults_for_timestamp配置标志在MySQL端进行更改。在启用此服务器设置的情况下,TIMESTAMP列的行为与MySQL侧的任何其他数据类型相对于默认和可空性相同。
但是,为了适应绝大多数不指定此新标志的MySQL数据库,SQLAlchemy会使用任何未指定nullable=False
的TIMESTAMP列显式地发出“NULL”说明符。为了适应更新的指定explicit_defaults_for_timestamp
的数据库,SQLAlchemy还为指定nullable=False
的TIMESTAMP列发出NOT NULL。以下示例说明:
from sqlalchemy import MetaData, Integer, Table, Column, text
from sqlalchemy.dialects.mysql import TIMESTAMP
m = MetaData()
t = Table('ts_test', m,
Column('a', Integer),
Column('b', Integer, nullable=False),
Column('c', TIMESTAMP),
Column('d', TIMESTAMP, nullable=False)
)
from sqlalchemy import create_engine
e = create_engine("mysql://scott:tiger@localhost/test", echo=True)
m.create_all(e)
输出:
CREATE TABLE ts_test (
a INTEGER,
b INTEGER NOT NULL,
c TIMESTAMP NULL,
d TIMESTAMP NOT NULL
)
版本1.0.0更改: - SQLAlchemy现在在所有情况下为TIMESTAMP列呈现NULL或NOT NULL,以适应explicit_defaults_for_timestamp
。在此版本之前,它不会为nullable=False
的TIMESTAMP列呈现“NOT NULL”。
与所有SQLAlchemy方言一样,所有已知可用于MySQL的UPPERCASE类型都可从顶级方言导入:
from sqlalchemy.dialects.mysql import \
BIGINT, BINARY, BIT, BLOB, BOOLEAN, CHAR, DATE, \
DATETIME, DECIMAL, DECIMAL, DOUBLE, ENUM, FLOAT, INTEGER, \
LONGBLOB, LONGTEXT, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, NCHAR, \
NUMERIC, NVARCHAR, REAL, SET, SMALLINT, TEXT, TIME, TIMESTAMP, \
TINYBLOB, TINYINT, TINYTEXT, VARBINARY, VARCHAR, YEAR
特定于MySQL的类型或具有特定于MySQL的构造参数的类型如下所示:
sqlalchemy.dialects.mysql。
BIGINT
( display_width = None, **千瓦 T5> ) T6> ¶ T7>基础:sqlalchemy.dialects.mysql.types._IntegerType
,sqlalchemy.types.BIGINT
MySQL BIGINTEGER类型。
sqlalchemy.dialects.mysql.
BINARY
(length=None)¶基础:sqlalchemy.types._Binary
SQL BINARY类型。
sqlalchemy.dialects.mysql.
BIT
(length=None)¶基础:sqlalchemy.types.TypeEngine
MySQL BIT类型。
这种类型适用于MyISAM的MySQL 5.0.3或更高版本,以及MyISAM,MEMORY,InnoDB和BDB的5.0.5或更高版本。对于旧版本,请使用MSTinyInteger()类型。
sqlalchemy.dialects.mysql.
BLOB
(length=None)¶基础:sqlalchemy.types.LargeBinary
SQL BLOB类型。
__初始化__ T0> ( T1> 长度=无 T2> ) T3> ¶ T4>
__init__()
method of LargeBinary
构建一个LargeBinary类型。
参数: | length¶ – optional, a length for the column for use in DDL statements, for those binary types that accept a length, such as the MySQL BLOB type. |
---|
sqlalchemy.dialects.mysql。
BOOLEAN
( create_constraint = True, name = None,_create_events = True tt> ) ¶SQL BOOLEAN类型。
__ init __
( create_constraint = True,name =无,_create_events = True ) T5> ¶ T6>__init__()
method of Boolean
构造一个布尔值。
参数: |
---|
sqlalchemy.dialects.mysql.
CHAR
(length=None, **kwargs)¶基础:sqlalchemy.dialects.mysql.types._StringType
,sqlalchemy.types.CHAR
MySQL CHAR类型,用于固定长度的字符数据。
sqlalchemy.dialects.mysql。
DATE
¶SQL DATE类型。
__初始化__ T0> ¶ T1>
__init__
属性 object
x .__ init __(...)初始化x;请参阅帮助(类型(x))进行签名
sqlalchemy.dialects.mysql。
DATETIME
( timezone = False, FSP =无 T5> ) T6> ¶ T7>MySQL DATETIME类型。
__init__
(timezone=False, fsp=None)¶构建一个MySQL DATETIME类型。
参数: |
---|
0.8.5版新增:增加了支持小数秒的特定于MySQL的mysql.DATETIME
。
sqlalchemy.dialects.mysql。
DECIMAL
( precision = None, scale = None,asdecimal = True,** kw ) 基础:sqlalchemy.dialects.mysql.types._NumericType
,sqlalchemy.types.DECIMAL
MySQL DECIMAL类型。
sqlalchemy.dialects.mysql。
DOUBLE
( precision = None, scale = None,asdecimal = True,** kw ) 基础:sqlalchemy.dialects.mysql.types._FloatType
MySQL DOUBLE类型。
sqlalchemy.dialects.mysql。
ENUM
( * enums,**千瓦 T5> ) T6> ¶ T7>基础:sqlalchemy.types.Enum
,sqlalchemy.dialects.mysql.enumerated._EnumeratedValues
MySQL ENUM类型。
__ init __
( * enums,** kw ) T5>构造一个枚举。
例如。:
Column('myenum', ENUM("foo", "bar", "baz"))
参数: |
|
---|
sqlalchemy.dialects.mysql。
FLOAT
( precision = None, scale = None,asdecimal = False,** kw ) 基础:sqlalchemy.dialects.mysql.types._FloatType
,sqlalchemy.types.FLOAT
MySQL FLOAT类型。
sqlalchemy.dialects.mysql。
INTEGER
( display_width = None, **千瓦 T5> ) T6> ¶ T7>基础:sqlalchemy.dialects.mysql.types._IntegerType
,sqlalchemy.types.INTEGER
MySQL INTEGER类型。
sqlalchemy.dialects.mysql。
JSON
( none_as_null = False ) T5> ¶ T6>MySQL JSON类型。
MySQL从版本5.7开始支持JSON。Note that MariaDB does not support JSON at the time of this writing.
mysql.JSON
类型支持JSON值的持久性以及types.JSON
数据类型提供的核心索引操作,方法是调整操作以呈现JSON_EXTRACT
版本1.1中的新功能
sqlalchemy.dialects.mysql。
LONGBLOB
( length = None ) T5> ¶ T6>基础:sqlalchemy.types._Binary
MySQL LONGBLOB类型,用于最多2 ^ 32字节的二进制数据。
sqlalchemy.dialects.mysql。
LONGTEXT
( ** kwargs ) T5> ¶ T6>基础:sqlalchemy.dialects.mysql.types._StringType
MySQL LONGTEXT类型,文本最多2 ^ 32个字符。
__初始化__ T0> ( T1> ** kwargs T2> ) T3> ¶ T4>
构建一个LONGTEXT。
参数: |
|
---|
sqlalchemy.dialects.mysql。
MEDIUMBLOB
( length = None ) T5> ¶ T6>基础:sqlalchemy.types._Binary
MySQL MEDIUMBLOB类型,用于最大2 ^ 24字节的二进制数据。
sqlalchemy.dialects.mysql。 tt> MEDIUMINT
( display_width = None, **千瓦 T5> ) T6> ¶ T7>
基础:sqlalchemy.dialects.mysql.types._IntegerType
MySQL MEDIUMINTEGER类型。
sqlalchemy.dialects.mysql。
MEDIUMTEXT
( ** kwargs ) T5> ¶ T6>基础:sqlalchemy.dialects.mysql.types._StringType
MySQL MEDIUMTEXT类型,用于最多2 ^ 24个字符的文本。
__初始化__ T0> ( T1> ** kwargs T2> ) T3> ¶ T4>
构建MEDIUMTEXT。
参数: |
|
---|
sqlalchemy.dialects.mysql。
NCHAR
( length = None, ** kwargs T5> ) T6> ¶ T7>基础:sqlalchemy.dialects.mysql.types._StringType
,sqlalchemy.types.NCHAR
MySQL NCHAR类型。
用于服务器配置的国家字符集中的固定长度字符数据。
sqlalchemy.dialects.mysql。
NUMERIC
( precision = None, scale = None,asdecimal = True,** kw ) 基础:sqlalchemy.dialects.mysql.types._NumericType
,sqlalchemy.types.NUMERIC
MySQL NUMERIC类型。
sqlalchemy.dialects.mysql。
NVARCHAR
( length = None, ** kwargs T5> ) T6> ¶ T7>基础:sqlalchemy.dialects.mysql.types._StringType
,sqlalchemy.types.NVARCHAR
MySQL NVARCHAR类型。
用于服务器配置的国家字符集中的可变长度字符数据。
sqlalchemy.dialects.mysql。
REAL
( precision = None, scale = None,asdecimal = True,** kw ) 基础:sqlalchemy.dialects.mysql.types._FloatType
,sqlalchemy.types.REAL
MySQL REAL类型。
sqlalchemy.dialects.mysql.
SET
(*values, **kw)¶基础:sqlalchemy.dialects.mysql.enumerated._EnumeratedValues
MySQL SET类型。
__init__
(*values, **kw)¶构建一个SET。
例如。:
Column('myset', SET("foo", "bar", "baz"))
如果此组将用于为表生成DDL,或者SET.retrieve_as_bitwise
标志设置为True,则需要使用潜在值列表。
参数: |
|
---|
sqlalchemy.dialects.mysql。
SMALLINT
( display_width = None, **千瓦 T5> ) T6> ¶ T7>基础:sqlalchemy.dialects.mysql.types._IntegerType
,sqlalchemy.types.SMALLINT
MySQL SMALLINTEGER类型。
sqlalchemy.dialects.mysql。
TEXT
( length = None, **千瓦 T5> ) T6> ¶ T7>基础:sqlalchemy.dialects.mysql.types._StringType
,sqlalchemy.types.TEXT
MySQL文本类型,文本最多2 ^ 16个字符。
__初始化__ T0> ( T1> 长度=无 T2>, **千瓦 T3> ) T4> ¶< / T5>
构建一个TEXT。
参数: |
|
---|
sqlalchemy.dialects.mysql.
TIME
(timezone=False, fsp=None)¶MySQL TIME类型。
sqlalchemy.dialects.mysql。
TIMESTAMP
( timezone = False, FSP =无 T5> ) T6> ¶ T7>MySQL TIMESTAMP类型。
__init__
(timezone=False, fsp=None)¶构建一个MySQL TIMESTAMP类型。
参数: |
---|
0.8.5版新增:增加了支持小数秒的特定于MySQL的mysql.TIMESTAMP
。
sqlalchemy.dialects.mysql。
TINYBLOB
( length = None ) T5> ¶ T6>基础:sqlalchemy.types._Binary
MySQL TINYBLOB类型,用于2 ^ 8字节的二进制数据。
sqlalchemy.dialects.mysql。
TINYINT
( display_width = None, **千瓦 T5> ) T6> ¶ T7>基础:sqlalchemy.dialects.mysql.types._IntegerType
MySQL TINYINT类型。
sqlalchemy.dialects.mysql。
TINYTEXT
( ** kwargs ) T5> ¶ T6>基础:sqlalchemy.dialects.mysql.types._StringType
MySQL TINYTEXT类型,文本最多2 ^ 8个字符。
__初始化__ T0> ( T1> ** kwargs T2> ) T3> ¶ T4>
构建一个TINYTEXT。
参数: |
|
---|
sqlalchemy.dialects.mysql.
VARBINARY
(length=None)¶基础:sqlalchemy.types._Binary
SQL VARBINARY类型。
sqlalchemy.dialects.mysql。
VARCHAR
( length = None, ** kwargs T5> ) T6> ¶ T7>基础:sqlalchemy.dialects.mysql.types._StringType
,sqlalchemy.types.VARCHAR
MySQL VARCHAR类型,用于可变长度字符数据。
__ init __
( length = None,** kwargs ) / T5>构建一个VARCHAR。
参数: |
|
---|
sqlalchemy.dialects.mysql。
YEAR
( display_width = None ) T5> ¶ T6>基础:sqlalchemy.types.TypeEngine
MySQL YEAR类型,用于1901-2155年的单字节存储。
通过MySQL-Python驱动程序支持MySQL数据库。
MySQL-Python的文档和下载信息(如果适用)可在以下网址找到:http://sourceforge.net/projects/mysql-python
目前,MySQLdb只在Python 2上运行,开发已停止。mysqlclient is fork of MySQLdb and provides Python 3 support as well as some bugfixes.
Google Cloud SQL现在推荐使用MySQLdb方言。使用以下URL连接:
mysql+mysqldb://root@/<dbname>?unix_socket=/cloudsql/<projectid>:<instancename>
通过PyMySQL驱动程序支持MySQL数据库。
PyMySQL的文档和下载信息(如果适用)可在以下网址获得:http://www.pymysql.org/
pymysql DBAPI是MySQL-python(MySQLdb)驱动程序的纯Python端口,其目标是100%的兼容性。MySQL-python的大多数行为注释也适用于pymysql驱动程序。
通过MySQL Connector / Python驱动程序支持MySQL数据库。
MySQL Connector / Python的文档和下载信息(如果适用)可在以下网址获得:http://dev.mysql.com/downloads/connector/python/
通过CyMySQL驱动程序支持MySQL数据库。
CyMySQL的文档和下载信息(如果适用)可在以下网址获得:https://github.com/nakagami/CyMySQL
通过OurSQL驱动程序支持MySQL数据库。
OurSQL的文档和下载信息(如果适用)可在以下网址获得:http://packages.python.org/oursql/
通过Google Cloud SQL驱动程序支持MySQL数据库。
这种方言主要基于mysql.mysqldb
方言,只有很少的变化。
New in version 0.7.8.
Deprecated since version 1.0: This dialect is no longer necessary for Google Cloud SQL; the MySQLdb dialect can be used directly. Cloud SQL现在推荐使用URL格式通过mysql方言创建连接
mysql+mysqldb://root@/<dbname>?unix_socket=/cloudsql/<projectid>:<instancename>
有关Google Cloud SQL的文档和下载信息(如果适用),请访问:https://developers.google.com/appengine/docs/python/cloud-sql/developers-guide
通过PyODBC驱动程序支持MySQL数据库。
注意
用于MySQL方言的PyODBC没有得到很好的支持,并且会受到当前ODBC驱动程序中存在的未解决的字符编码问题的影响。(请参阅http://code.google.com/p/pyodbc/issues/detail?id=25)。推荐其他MySQL的方言。
PyODBC的文档和下载信息(如果适用)可在以下网址获得:http://pypi.python.org/pypi/pyodbc/
通过用于Jython驱动程序的zxjdbc支持MySQL数据库。
注意
当前版本的SQLAlchemy不支持Jython。zxjdbc方言应该被认为是实验性的。
此数据库的驱动程序可在以下网址找到:http://dev.mysql.com/downloads/connector/j/
SQLAlchemy zxjdbc方言将unicode直接传递给zxjdbc / JDBC层。为了允许从MySQL Connector / J JDBC驱动程序发送多个字符集,默认情况下,SQLAlchemy将其characterEncoding
连接属性设置为UTF-8
。它可以通过create_engine
URL参数覆盖。