Python 除了插入时的主键约束,使用_mssql

Python 除了插入时的主键约束,使用_mssql,python,sql,sql-server,exception,primary-key,Python,Sql,Sql Server,Exception,Primary Key,MSSQL 2005服务器IIRC和Python模块_MSSQL。。我对一个表有多个插入,其中一行是主键。。现在有可能多次插入相同的值,但我只想忽略违反主键约束的情况。应该提出其他错误 我知道我可以尝试:[…]插入[…]除了:*魔术*:通过,但我找不到发生的异常的名称 编辑: 我不知道这个解决方案是否可以接受,但到目前为止我已经知道了 try: con.execute_query('INSERT [...]'

MSSQL 2005服务器IIRC和Python模块_MSSQL。。我对一个表有多个插入,其中一行是主键。。现在有可能多次插入相同的值,但我只想忽略违反主键约束的情况。应该提出其他错误

我知道我可以尝试:[…]插入[…]除了:*魔术*:通过,但我找不到发生的异常的名称

编辑:

我不知道这个解决方案是否可以接受,但到目前为止我已经知道了

                    try:
                        con.execute_query('INSERT [...]')
                    except _mssql.MssqlDatabaseException,e:
                        if e.number == 2627:
                            #primary key constraint
                            pass
                        else:
                            raise

您需要执行UPSERT,这意味着如果存在,则更新,或者插入。由于您使用的是非常旧的SQL Server版本,请尝试以下操作:

q = """IF EXISTS (SELECT PrimaryKeyField FROM SomeTable WHERE PrimaryKeyField = %s)
    UPDATE SomeTable
        SET
            SomeFieldA = %s,
            SomeFieldB = %s,
            SomeNumberA = %d
        WHERE
            PrimaryKeyField = %s
    ELSE
        INSERT INTO SomeTable (
            PrimaryKeyField,
            SomeFieldA,
            SomeFieldB,
            SomeNumberA
        ) VALUES (%s,%s,%s,%d)"""

cur.execute(q, ('a','b','c',1,'a','b','c',1))
con.commit()

是否确实需要忽略主键?您听说过规范化吗?我需要忽略python中出现的错误,因为由于性能原因,此脚本可能会尝试插入现有值。您使用什么数据库?Microsoft SQL Server 2005谢谢您的建议,但如前所述,任何更新或检查密钥是否已经存在都会减慢进程,不幸的是,在我的情况下,这是不可接受的。所以我需要忽略这个错误,因为在这种情况下它不会添加任何内容。请理解-主键非常重要。你觉得现在慢了吗?等你开始查询时,你的钥匙不准确。是的,我明白。此表的处理速度必须尽可能快。尝试多次写入非唯一主键,但未写入数据库~key constraint exception。。填充的表稍后会合并到一个新表中,在该表中它们将按其应该的方式进行处理。