python data_error ai_generated true

sqlalchemy.exc.IntegrityError:(psycopg2.errors.UniqueViolation) 重复键值违反唯一约束 "users_email_key"

sqlalchemy.exc.IntegrityError: (psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint "users_email_key"

ID: python/sqlalchemy-integrity-error-duplicate

其他格式: JSON · Markdown 中文 · English
80%修复率
85%置信度
0证据数
2024-05-12首次发现

版本兼容性

版本状态引入弃用备注
3.x active

根因分析

在唯一列中插入重复值。

English

Inserting a record with a duplicate value in a unique column.

generic

解决方案

  1. 95% 成功率 Check for existing record before insert.
    existing = session.query(User).filter_by(email='[email protected]').first()
    if not existing:
        session.add(User(email='[email protected]'))
    session.commit()
  2. 90% 成功率 Use ON CONFLICT DO NOTHING via SQLAlchemy dialect.
    from sqlalchemy.dialects.postgresql import insert
    stmt = insert(User).values(email='[email protected]').on_conflict_do_nothing()
    session.execute(stmt)
    session.commit()

无效尝试

常见但无效的做法:

  1. Catching exception and ignoring without rollback. 90% 失败

    Transaction remains in aborted state; subsequent queries fail.

  2. Using session.merge() without checking for conflicts. 60% 失败

    Merge may still raise IntegrityError if primary key conflicts.