作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 SQLAlchemy
将数据批量插入到 postgres,但无法找到如何通过唯一约束忽略重复值
我的代码
from sqlalchemy.dialects.postgresql import insert
stmt = insert(User, inline=True)
values = [{"id": 1, "name": "David"}, {"id": 2, "name": "Cris"}]
session.execute(stmt, values)
session.commit()
出现这样的错误
sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) duplicate key value violates unique constraint "uq_users_name"
最佳答案
默认情况下,sqlalchemy 不支持ignore_duplicates
选项,因此我们需要通过简单地在末尾添加 ON CONFLICT DO NOTHING
字符串来向 sqlalchemy 查询编译器添加自定义方法查询
from sqlalchemy.dialects.postgresql import insert
from sqlalchemy.ext.compiler import compiles
@compiles(Insert, 'postgresql')
def ignore_duplicates(insert, compiler, **kw):
s = compiler.visit_insert(insert, **kw)
ignore = insert.kwargs.get('postgresql_ignore_duplicates', False)
return s if not ignore else s + ' ON CONFLICT DO NOTHING'
Insert.argument_for('postgresql', 'ignore_duplicates', None)
stmt = insert(User, postgresql_ignore_duplicates=True, inline=True)
values = [{"id": 1, "name": "David"}, {"id": 2, "name": "Cris"}]
session.execute(stmt, values)
session.commit()
关于python - sqlalalchemy postgresql 插入语句忽略重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57725001/
我是一名优秀的程序员,十分优秀!