SQLAlchemy 核心 - 插入忽略和重复密钥更新

Tra*_*VOX 8 python sqlalchemy

我正在将 SQLAlchemy Core 与 MySQL 数据库一起使用,但很难找到 INSERT IGNORE / DUPLICATE KEY UPDATE 的解决方案。如果有办法处理这个问题,我讨厌在代码中手动编写一次性查询。我发现的大多数解决方案或讨论都围绕 ORM,而不是核心。甚至其中一些是死链接。甚至有可能吗?

sha*_*aan 10

我知道现在有点晚了..但如果有人仍在寻找解决方案。

对于:关于重复密钥更新

ins = insert(/* table_name*/ ).values(/*your values(with PK)*/)
do_update_stmt = ins.on_duplicate_key_update(/*your values(with out PK)*/)
connection.execute(do_update_stmt)
Run Code Online (Sandbox Code Playgroud)

关于重复的密钥更新文档

MySQL 支持的 INSERT 的 ON DUPLICATE KEY UPDATE 子句现在支持使用MySQL 特定版本的 Insert 对象

这不适用于sqlalchemy.insert().

对于:插入忽略

这有点hacky,但效果很好。

 ins_address_stmt = insert(/* table_name*/ ).values(/*your values*/). \
            prefix_with('IGNORE')
Run Code Online (Sandbox Code Playgroud)

插入 prefix_with

MySQL 将抑制重复主键的错误并给出警告。


小智 5

shaktimaan 的回答非常适合 MySQL INSERT IGNORE。如果您发现此页面寻找 SQLite INSERT IGNORE,请记住执行 INSERT OR IGNORE

https://www.sqlite.org/lang_insert.html

stmt = insert(/* table_name*/ ).values(/*your values*/).prefix_with('OR IGNORE')
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

10824 次

最近记录:

4 年,3 月 前