插入、更新、删除
插入、更新和删除语句基于以开头的层次结构生成 UpdateBase
. 这个 Insert
和 Update
构建基于中介的 ValuesBase
.
DML基础构造函数
顶级的“插入”、“更新”、“删除”构造函数。
Object Name | Description |
---|---|
delete(table[, whereclause, bind, returning, ...], **dialect_kw) | 构建 |
insert(table[, values, inline, bind, ...], **dialect_kw) | 构建一个 |
update(table[, whereclause, values, inline, ...], **dialect_kw) | 构建一个 |
- function sqlalchemy.sql.expression.delete(table, whereclause=None, bind=None, returning=None, prefixes=None, **dialect_kw)
中列出的构造函数的类文档 DML基础构造函数 .
Object Name Description 表示删除构造。
表示插入构造。
表示更新构造。
为…奠定基础
INSERT
,UPDATE
和DELETE
声明。为…提供支持
ValuesBase.values()
插入和更新构造。 - class sqlalchemy.sql.expression.Delete(table, whereclause=None, bind=None, returning=None, prefixes=None, **dialect_kw)¶
表示删除构造。
类签名
class
sqlalchemy.sql.expression.Delete
(sqlalchemy.sql.expression.DMLWhereBase
,sqlalchemy.sql.expression.UpdateBase
)- method
sqlalchemy.sql.expression.Delete.
where(*whereclause)¶ inherited from the
DMLWhereBase.where()
method ofDMLWhereBase
返回一个新的构造,其中给定的表达式添加到其WHERE子句中,并通过AND(如果有)连接到现有子句。
两个
Update.where()
和Delete.where()
支持多种表格形式,包括特定于数据库的表格UPDATE...FROM
以及DELETE..USING
. 对于不支持多个表的后端,使用多个表的与后端无关的方法是使用相关的子查询。有关示例,请参见下面的链接教程部分。参见
1.x教程示例
2.0教程示例
- method
sqlalchemy.sql.expression.Delete.
returning(*cols)¶ inherited from the
UpdateBase.returning()
method ofUpdateBase
添加 RETURNING 或与此声明等效的子句。
例如。:
>>> stmt = ( ... table.update() ... .where(table.c.data == "value") ... .values(status="X") ... .returning(table.c.server_flag, table.c.updated_timestamp) ... ) >>> print(stmt) UPDATE some_table SET status=:status WHERE some_table.data = :data_1 RETURNING some_table.server_flag, some_table.updated_timestamp
可以多次调用该方法以将新条目添加到要返回的表达式列表中。
1.4.0b2 新版功能: 可以多次调用该方法以将新条目添加到要返回的表达式列表中。
列表达式的给定集合应派生自作为插入、更新或删除目标的表。同时
Column
对象是典型的,元素也可以是表达式:>>> stmt = table.insert().returning( ... (table.c.first_name + " " + table.c.last_name).label("fullname") ... ) >>> print(stmt) INSERT INTO some_table (first_name, last_name) VALUES (:first_name, :last_name) RETURNING some_table.first_name || :first_name_1 || some_table.last_name AS fullname
编译后,将在语句中呈现返回子句或等效数据库。对于插入和更新,这些值是新插入/更新的值。对于“删除”,值是已删除的行的值。
执行后,将返回的列的值通过结果集可用,并且可以使用
CursorResult.fetchone()
类似的。对于本机不支持返回值的dbapi(即cx_oracle),SQLAlchemy将在结果级别近似此行为,以便提供合理的行为中立性。请注意,并非所有数据库/dbapis都支持返回。对于那些不支持的后端,在编译和/或执行时会引发异常。对于那些支持它的人来说,后端的功能差异很大,包括对executeMany()和其他返回多行的语句的限制。请阅读正在使用的数据库的文档说明,以确定返回的可用性。
参见
ValuesBase.return_defaults()
-为有效获取服务器端默认值和触发器而量身定制的一种替代方法,用于单行插入或更新。INSERT...RETURNING - in the SQLAlchemy 1.4/2.0教程
- method
sqlalchemy.sql.expression.Delete.
__init__(table, whereclause=None, bind=None, returning=None, prefixes=None, **dialect_kw)¶ 构建新的
Delete
对象。此构造函数被镜像为公共API函数;请参见
sqlalchemy.sql.expression.delete()
完整的用法和参数描述。
- method
- class sqlalchemy.sql.expression.Insert(table, values=None, inline=False, bind=None, prefixes=None, returning=None, return_defaults=False, **dialect_kw)¶
表示插入构造。
类签名
class
sqlalchemy.sql.expression.Insert
(sqlalchemy.sql.expression.ValuesBase
)- method
sqlalchemy.sql.expression.Insert.
values(*args, **kwargs)¶ inherited from the
ValuesBase.values()
method ofValuesBase
为INSERT语句指定固定值子句,或为UPDATE指定SET子句。
请注意
Insert
和Update
根据传递给的参数,构造支持值和/或set子句的每次执行时格式设置。Connection.execute()
. 然而,ValuesBase.values()
方法可用于“修复”语句中的一组特定参数。多次呼叫
ValuesBase.values()
将生成一个新的构造,每个构造都修改了参数列表,以包含发送的新参数。在单个参数字典的典型情况下,新传递的键将替换前面构造中的相同键。在基于列表的“多个值”构造的情况下,每个新的值列表都会扩展到现有的值列表中。- 参数
**kwargs¶ -- 表示字符串键的键值对
Column
映射到要呈现到values或set子句中的值:users.insert().values(name=“some name”)users.update().where(users.c.id==5).values(name=“some name”)*args¶ -- 作为传递键/值参数的替代方法,可以将字典、元组或字典或元组列表作为单个位置参数传递,以形成语句的values或set子句。接受的表单根据是否
Insert
或Update
构建。对于任何一个Insert
或Update
构造时,可以传递一个字典,其工作方式与Kwargs Form::Users.Insert().Values(“name”:“some name”)Users.Update().Values(“name”:“some new name”)相同,但更常见的是针对Insert
构造时,还接受包含表中每个列的条目的元组::users.insert().values((5,“some name”))和Insert
construct还支持传递字典列表或全表元组,服务器上的这些列表将呈现“多个值”较不常见的SQL语法-后端支持此语法,如sqlite、postgresql、mysql,但不一定是其他::users.insert()。values( [“name”:“some name”,“name”:“some other name”,“name”:“yet another name”,] )上面的表单将呈现类似于::insert into users(name)values的multiple values语句。 (:name_1), (:name_2), (:name_3) It is essential to note that passing multiple values is NOT the same as using traditional executemany() form. The above syntax is a special syntax not typically used. To emit an INSERT statement against multiple rows, the normal method is to pass a multiple values list to theConnection.execute()
方法,它由所有数据库后端支持,通常对于大量参数更有效。…参阅: 执行多个语句 -介绍插入和其他语句的多参数集调用的传统核心方法。…versionChanged::1.0.0使用多值子句的插入,即使是长度为1的列表,也意味着Insert.inline
标志设置为true,表示该语句不会尝试获取“最后插入的主键”或其他默认值。语句处理任意数量的行,因此CursorResult.inserted_primary_key
访问器不适用。…versionChanged::1.0.0多值插入现在支持具有Python端默认值和可调用文件的列,方式与“ExecuteMany”调用方式相同;可调用文件对每一行进行调用。见 当使用多值插入时,为每行单独调用python端默认值 其他细节。UPDATE构造还支持按特定顺序呈现设置参数。有关此功能,请参阅Update.ordered_values()
方法。。另请参见:Update.ordered_values()
- method
sqlalchemy.sql.expression.Insert.
returning(*cols)¶ inherited from the
UpdateBase.returning()
method ofUpdateBase
添加 RETURNING 或与此声明等效的子句。
例如。:
>>> stmt = ( ... table.update() ... .where(table.c.data == "value") ... .values(status="X") ... .returning(table.c.server_flag, table.c.updated_timestamp) ... ) >>> print(stmt) UPDATE some_table SET status=:status WHERE some_table.data = :data_1 RETURNING some_table.server_flag, some_table.updated_timestamp
可以多次调用该方法以将新条目添加到要返回的表达式列表中。
1.4.0b2 新版功能: 可以多次调用该方法以将新条目添加到要返回的表达式列表中。
列表达式的给定集合应派生自作为插入、更新或删除目标的表。同时
Column
对象是典型的,元素也可以是表达式:>>> stmt = table.insert().returning( ... (table.c.first_name + " " + table.c.last_name).label("fullname") ... ) >>> print(stmt) INSERT INTO some_table (first_name, last_name) VALUES (:first_name, :last_name) RETURNING some_table.first_name || :first_name_1 || some_table.last_name AS fullname
编译后,将在语句中呈现返回子句或等效数据库。对于插入和更新,这些值是新插入/更新的值。对于“删除”,值是已删除的行的值。
执行后,将返回的列的值通过结果集可用,并且可以使用
CursorResult.fetchone()
类似的。对于本机不支持返回值的dbapi(即cx_oracle),SQLAlchemy将在结果级别近似此行为,以便提供合理的行为中立性。请注意,并非所有数据库/dbapis都支持返回。对于那些不支持的后端,在编译和/或执行时会引发异常。对于那些支持它的人来说,后端的功能差异很大,包括对executeMany()和其他返回多行的语句的限制。请阅读正在使用的数据库的文档说明,以确定返回的可用性。
参见
ValuesBase.return_defaults()
-为有效获取服务器端默认值和触发器而量身定制的一种替代方法,用于单行插入或更新。INSERT...RETURNING - in the SQLAlchemy 1.4/2.0教程
- method
sqlalchemy.sql.expression.Insert.
__init__(table, values=None, inline=False, bind=None, prefixes=None, returning=None, return_defaults=False, **dialect_kw)¶ 构建新的
Insert
对象。此构造函数被镜像为公共API函数;请参见
sqlalchemy.sql.expression.insert()
完整的用法和参数描述。
- method
sqlalchemy.sql.expression.Insert.
from_select(names, select, include_defaults=True)¶ 返回一个新的
Insert
表示一个INSERT...FROM SELECT
语句。例如。::
sel = select(table1.c.a, table1.c.b).where(table1.c.c > 5) ins = table2.insert().from_select(['a', 'b'], sel)
- 参数
select¶ -- 一
select()
构建,FromClause
或其他构造,其分解为FromClause
,例如ORMQuery
对象等。从此From子句返回的列的顺序应与作为names
参数;虽然在传递到数据库之前不检查此项,但是如果这些列列表不对应,数据库通常会引发异常。include_defaults¶ -- 如果为true,则为上指定的非服务器默认值和SQL表达式
Column
对象(如 列插入/更新默认值 )名称列表中未另行指定的值将呈现到insert和select语句中,以便这些值也包含在要插入的数据中。…注意:只调用使用python可调用函数的python端默认值 once 对于整个陈述,以及 不是每行 . …添加的版本:1.0.0-Insert.from_select()
现在将python端和sql表达式列默认呈现到列的select语句中,否则不包括在列名称列表中。
在 1.0.0 版更改: 使用From Select的插入意味着
insert.inline
标志设置为true,表示该语句不会尝试获取“最后插入的主键”或其他默认值。语句处理任意数量的行,因此CursorResult.inserted_primary_key
访问器不适用。
- method
sqlalchemy.sql.expression.Insert.
inline()¶ 做这个
Insert
构建“内联”。设置后,将不会尝试检索要在语句中提供的SQL生成的默认值;特别是,这允许SQL表达式在语句中“内联”呈现,而无需预先执行它们;对于支持“返回”的后端,这将关闭语句的“隐式返回”功能。
在 1.4 版更改: 这个
Insert.inline
参数现在被Insert.inline()
方法。
- method
- class sqlalchemy.sql.expression.Update(table, whereclause=None, values=None, inline=False, bind=None, prefixes=None, returning=None, return_defaults=False, preserve_parameter_order=False, **dialect_kw)¶
表示更新构造。
类签名
class
sqlalchemy.sql.expression.Update
(sqlalchemy.sql.expression.DMLWhereBase
,sqlalchemy.sql.expression.ValuesBase
)- method
sqlalchemy.sql.expression.Update.
returning(*cols)¶ inherited from the
UpdateBase.returning()
method ofUpdateBase
添加 RETURNING 或与此声明等效的子句。
例如。:
>>> stmt = ( ... table.update() ... .where(table.c.data == "value") ... .values(status="X") ... .returning(table.c.server_flag, table.c.updated_timestamp) ... ) >>> print(stmt) UPDATE some_table SET status=:status WHERE some_table.data = :data_1 RETURNING some_table.server_flag, some_table.updated_timestamp
可以多次调用该方法以将新条目添加到要返回的表达式列表中。
1.4.0b2 新版功能: 可以多次调用该方法以将新条目添加到要返回的表达式列表中。
列表达式的给定集合应派生自作为插入、更新或删除目标的表。同时
Column
对象是典型的,元素也可以是表达式:>>> stmt = table.insert().returning( ... (table.c.first_name + " " + table.c.last_name).label("fullname") ... ) >>> print(stmt) INSERT INTO some_table (first_name, last_name) VALUES (:first_name, :last_name) RETURNING some_table.first_name || :first_name_1 || some_table.last_name AS fullname
编译后,将在语句中呈现返回子句或等效数据库。对于插入和更新,这些值是新插入/更新的值。对于“删除”,值是已删除的行的值。
执行后,将返回的列的值通过结果集可用,并且可以使用
CursorResult.fetchone()
类似的。对于本机不支持返回值的dbapi(即cx_oracle),SQLAlchemy将在结果级别近似此行为,以便提供合理的行为中立性。请注意,并非所有数据库/dbapis都支持返回。对于那些不支持的后端,在编译和/或执行时会引发异常。对于那些支持它的人来说,后端的功能差异很大,包括对executeMany()和其他返回多行的语句的限制。请阅读正在使用的数据库的文档说明,以确定返回的可用性。
参见
ValuesBase.return_defaults()
-为有效获取服务器端默认值和触发器而量身定制的一种替代方法,用于单行插入或更新。INSERT...RETURNING - in the SQLAlchemy 1.4/2.0教程
- method
sqlalchemy.sql.expression.Update.
where(*whereclause)¶ inherited from the
DMLWhereBase.where()
method ofDMLWhereBase
返回一个新的构造,其中给定的表达式添加到其WHERE子句中,并通过AND(如果有)连接到现有子句。
两个
Update.where()
和Delete.where()
支持多种表格形式,包括特定于数据库的表格UPDATE...FROM
以及DELETE..USING
. 对于不支持多个表的后端,使用多个表的与后端无关的方法是使用相关的子查询。有关示例,请参见下面的链接教程部分。参见
1.x教程示例
2.0教程示例
- method
sqlalchemy.sql.expression.Update.
values(*args, **kwargs)¶ inherited from the
ValuesBase.values()
method ofValuesBase
为INSERT语句指定固定值子句,或为UPDATE指定SET子句。
请注意
Insert
和Update
根据传递给的参数,构造支持值和/或set子句的每次执行时格式设置。Connection.execute()
. 然而,ValuesBase.values()
方法可用于“修复”语句中的一组特定参数。多次呼叫
ValuesBase.values()
将生成一个新的构造,每个构造都修改了参数列表,以包含发送的新参数。在单个参数字典的典型情况下,新传递的键将替换前面构造中的相同键。在基于列表的“多个值”构造的情况下,每个新的值列表都会扩展到现有的值列表中。- 参数
**kwargs¶ -- 表示字符串键的键值对
Column
映射到要呈现到values或set子句中的值:users.insert().values(name=“some name”)users.update().where(users.c.id==5).values(name=“some name”)*args¶ -- 作为传递键/值参数的替代方法,可以将字典、元组或字典或元组列表作为单个位置参数传递,以形成语句的values或set子句。接受的表单根据是否
Insert
或Update
构建。对于任何一个Insert
或Update
构造时,可以传递一个字典,其工作方式与Kwargs Form::Users.Insert().Values(“name”:“some name”)Users.Update().Values(“name”:“some new name”)相同,但更常见的是针对Insert
构造时,还接受包含表中每个列的条目的元组::users.insert().values((5,“some name”))和Insert
construct还支持传递字典列表或全表元组,服务器上的这些列表将呈现“多个值”较不常见的SQL语法-后端支持此语法,如sqlite、postgresql、mysql,但不一定是其他::users.insert()。values( [“name”:“some name”,“name”:“some other name”,“name”:“yet another name”,] )上面的表单将呈现类似于::insert into users(name)values的multiple values语句。 (:name_1), (:name_2), (:name_3) It is essential to note that passing multiple values is NOT the same as using traditional executemany() form. The above syntax is a special syntax not typically used. To emit an INSERT statement against multiple rows, the normal method is to pass a multiple values list to theConnection.execute()
方法,它由所有数据库后端支持,通常对于大量参数更有效。…参阅: 执行多个语句 -介绍插入和其他语句的多参数集调用的传统核心方法。…versionChanged::1.0.0使用多值子句的插入,即使是长度为1的列表,也意味着Insert.inline
标志设置为true,表示该语句不会尝试获取“最后插入的主键”或其他默认值。语句处理任意数量的行,因此CursorResult.inserted_primary_key
访问器不适用。…versionChanged::1.0.0多值插入现在支持具有Python端默认值和可调用文件的列,方式与“ExecuteMany”调用方式相同;可调用文件对每一行进行调用。见 当使用多值插入时,为每行单独调用python端默认值 其他细节。UPDATE构造还支持按特定顺序呈现设置参数。有关此功能,请参阅Update.ordered_values()
方法。。另请参见:Update.ordered_values()
- method
sqlalchemy.sql.expression.Update.
__init__(table, whereclause=None, values=None, inline=False, bind=None, prefixes=None, returning=None, return_defaults=False, preserve_parameter_order=False, **dialect_kw)¶ 构建新的
Update
对象。此构造函数被镜像为公共API函数;请参见
sqlalchemy.sql.expression.update()
完整的用法和参数描述。
- method
sqlalchemy.sql.expression.Update.
inline()¶ 做这个
Update
构建“内联”。设置后,SQL默认值显示在
Column
对象通过default
关键字将被“inline”编译到语句中,而不是预先执行。这意味着它们的值在从返回的字典中不可用。CursorResult.last_updated_params()
.在 1.4 版更改: 这个
update.inline
参数现在被Update.inline()
方法。
- method
sqlalchemy.sql.expression.Update.
ordered_values(*args)¶ 使用显式参数顺序指定此UPDATE语句的VALUES子句,该顺序将在生成的UPDATE语句的SET子句中维护。
例如。::
stmt = table.update().ordered_values( ("name", "ed"), ("ident": "foo") )
参见
参数顺序更新 -完整的示例
Update.ordered_values()
方法。在 1.4 版更改: 这个
Update.ordered_values()
方法取代update.preserve_parameter_order
参数,它将在SQLAlchemy 2.0中删除。
- method
- class sqlalchemy.sql.expression.UpdateBase¶
为…奠定基础
INSERT
,UPDATE
和DELETE
声明。类签名
class
sqlalchemy.sql.expression.UpdateBase
(sqlalchemy.sql.roles.DMLRole
,sqlalchemy.sql.expression.HasCTE
,sqlalchemy.sql.expression.HasCompileState
,sqlalchemy.sql.base.DialectKWArgs
,sqlalchemy.sql.expression.HasPrefixes
,sqlalchemy.sql.expression.ReturnsRows
,sqlalchemy.sql.expression.Executable
,sqlalchemy.sql.expression.ClauseElement
)- attribute
sqlalchemy.sql.expression.UpdateBase.
bind¶ 返回链接到此的“bind”
UpdateBase
或ATable
与之相关。
- attribute
sqlalchemy.sql.expression.UpdateBase.
exported_columns¶ 将返回的列作为此语句的列集合返回。
1.4 新版功能.
- method
sqlalchemy.sql.expression.UpdateBase.
params(*arg, **kw)¶ 设置语句的参数。
此方法引发
NotImplementedError
在基类上,并被重写ValuesBase
提供update和insert的set/values子句。
- method
sqlalchemy.sql.expression.UpdateBase.
returning(*cols)¶ 添加 RETURNING 或与此声明等效的子句。
例如。:
>>> stmt = ( ... table.update() ... .where(table.c.data == "value") ... .values(status="X") ... .returning(table.c.server_flag, table.c.updated_timestamp) ... ) >>> print(stmt) UPDATE some_table SET status=:status WHERE some_table.data = :data_1 RETURNING some_table.server_flag, some_table.updated_timestamp
可以多次调用该方法以将新条目添加到要返回的表达式列表中。
1.4.0b2 新版功能: 可以多次调用该方法以将新条目添加到要返回的表达式列表中。
列表达式的给定集合应派生自作为插入、更新或删除目标的表。同时
Column
对象是典型的,元素也可以是表达式:>>> stmt = table.insert().returning( ... (table.c.first_name + " " + table.c.last_name).label("fullname") ... ) >>> print(stmt) INSERT INTO some_table (first_name, last_name) VALUES (:first_name, :last_name) RETURNING some_table.first_name || :first_name_1 || some_table.last_name AS fullname
编译后,将在语句中呈现返回子句或等效数据库。对于插入和更新,这些值是新插入/更新的值。对于“删除”,值是已删除的行的值。
执行后,将返回的列的值通过结果集可用,并且可以使用
CursorResult.fetchone()
类似的。对于本机不支持返回值的dbapi(即cx_oracle),SQLAlchemy将在结果级别近似此行为,以便提供合理的行为中立性。请注意,并非所有数据库/dbapis都支持返回。对于那些不支持的后端,在编译和/或执行时会引发异常。对于那些支持它的人来说,后端的功能差异很大,包括对executeMany()和其他返回多行的语句的限制。请阅读正在使用的数据库的文档说明,以确定返回的可用性。
参见
ValuesBase.return_defaults()
-为有效获取服务器端默认值和触发器而量身定制的一种替代方法,用于单行插入或更新。INSERT...RETURNING - in the SQLAlchemy 1.4/2.0教程
- method
sqlalchemy.sql.expression.UpdateBase.
with_dialect_options(**opt)¶ 将方言选项添加到此插入/更新/删除对象。
例如。::
upd = table.update().dialect_options(mysql_limit=10)
- method
sqlalchemy.sql.expression.UpdateBase.
with_hint(text, selectable=None, dialect_name='*')¶ 在此INSERT/UPDATE/DELETE语句中添加单个表的表提示。
注解
UpdateBase.with_hint()
当前仅适用于Microsoft SQL Server。对于MySQL插入/更新/删除提示,请使用UpdateBase.prefix_with()
.提示文本呈现在正在使用的数据库后端的适当位置,相对于
Table
这是本声明的主题,或者是给定的主题Table
作为传递selectable
争论。这个
dialect_name
选项将把特定提示的呈现限制到特定的后端。例如,要添加仅对SQL Server有效的提示,请执行以下操作:mytable.insert().with_hint("WITH (PAGLOCK)", dialect_name="mssql")
- attribute
- class sqlalchemy.sql.expression.ValuesBase(table, values, prefixes)¶
为…提供支持
ValuesBase.values()
插入和更新构造。类签名
class
sqlalchemy.sql.expression.ValuesBase
(sqlalchemy.sql.expression.UpdateBase
)- method
sqlalchemy.sql.expression.ValuesBase.
return_defaults(*cols)¶ 利用一个 RETURNING 用于获取服务器端表达式和默认值的子句。
例如。::
stmt = table.insert().values(data='newdata').return_defaults() result = connection.execute(stmt) server_created_at = result.returned_defaults['created_at']
当用于支持返回的后端时,由SQL表达式或服务器端默认值生成的所有列值都将添加到任何现有的返回子句中,前提是
UpdateBase.returning()
不能同时使用。然后,列值将在结果中使用CursorResult.returned_defaults
作为字典的访问器,引用键入到Column
对象及其.key
.这种方法不同于
UpdateBase.returning()
以这些方式:ValuesBase.return_defaults()
只用于与每个参数集只匹配一行的INSERT或UPDATE语句一起使用。而一般意义上的RETURNING构造支持多行UPDATE或DELETE语句,或返回多行的INSERT的特殊情况(例如INSERT from SELECT、multi-VALUES子句),ValuesBase.return_defaults()
仅用于“ORM样式”单行插入/更新语句。语句返回的行在ValuesBase.return_defaults()
使用。相比之下,UpdateBase.returning()
使返回的结果集保持原样,包含任意数量的行的集合。它与提取自动生成的主键值(也称为“隐式返回”)的现有逻辑兼容。支持返回的后端将自动利用返回来获取新生成的主键的值;而
UpdateBase.returning()
方法规避了这种行为,ValuesBase.return_defaults()
保持原样。它可以针对任何后端调用。不支持返回的后端将跳过功能的使用,而不是引发异常。的返回值
CursorResult.returned_defaults
将None
如果后端数据库驱动程序支持
insert_executemany_returning
特性,目前包括PostgreSQL和psycopg2。使用executemany时CursorResult.returned_defaults_rows
和CursorResult.inserted_primary_key_rows
访问器将返回插入的默认值和主键。1.4 新版功能.
ValuesBase.return_defaults()
被ORM用来为eager_defaults
特点mapper()
.0.9.0 新版功能.
参见
CursorResult.returned_defaults
CursorResult.returned_defaults_rows
- method
sqlalchemy.sql.expression.ValuesBase.
values(*args, **kwargs)¶ 为INSERT语句指定固定值子句,或为UPDATE指定SET子句。
请注意
Insert
和Update
根据传递给的参数,构造支持值和/或set子句的每次执行时格式设置。Connection.execute()
. 然而,ValuesBase.values()
方法可用于“修复”语句中的一组特定参数。多次呼叫
ValuesBase.values()
将生成一个新的构造,每个构造都修改了参数列表,以包含发送的新参数。在单个参数字典的典型情况下,新传递的键将替换前面构造中的相同键。在基于列表的“多个值”构造的情况下,每个新的值列表都会扩展到现有的值列表中。- 参数
**kwargs¶ -- 表示字符串键的键值对
Column
映射到要呈现到values或set子句中的值:users.insert().values(name=“some name”)users.update().where(users.c.id==5).values(name=“some name”)*args¶ -- 作为传递键/值参数的替代方法,可以将字典、元组或字典或元组列表作为单个位置参数传递,以形成语句的values或set子句。接受的表单根据是否
Insert
或Update
构建。对于任何一个Insert
或Update
构造时,可以传递一个字典,其工作方式与Kwargs Form::Users.Insert().Values(“name”:“some name”)Users.Update().Values(“name”:“some new name”)相同,但更常见的是针对Insert
构造时,还接受包含表中每个列的条目的元组::users.insert().values((5,“some name”))和Insert
construct还支持传递字典列表或全表元组,服务器上的这些列表将呈现“多个值”较不常见的SQL语法-后端支持此语法,如sqlite、postgresql、mysql,但不一定是其他::users.insert()。values( [“name”:“some name”,“name”:“some other name”,“name”:“yet another name”,] )上面的表单将呈现类似于::insert into users(name)values的multiple values语句。 (:name_1), (:name_2), (:name_3) It is essential to note that passing multiple values is NOT the same as using traditional executemany() form. The above syntax is a special syntax not typically used. To emit an INSERT statement against multiple rows, the normal method is to pass a multiple values list to theConnection.execute()
方法,它由所有数据库后端支持,通常对于大量参数更有效。…参阅: 执行多个语句 -介绍插入和其他语句的多参数集调用的传统核心方法。…versionChanged::1.0.0使用多值子句的插入,即使是长度为1的列表,也意味着Insert.inline
标志设置为true,表示该语句不会尝试获取“最后插入的主键”或其他默认值。语句处理任意数量的行,因此CursorResult.inserted_primary_key
访问器不适用。…versionChanged::1.0.0多值插入现在支持具有Python端默认值和可调用文件的列,方式与“ExecuteMany”调用方式相同;可调用文件对每一行进行调用。见 当使用多值插入时,为每行单独调用python端默认值 其他细节。UPDATE构造还支持按特定顺序呈现设置参数。有关此功能,请参阅Update.ordered_values()
方法。。另请参见:Update.ordered_values()
- method