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

时间:2014-09-25 09:46:24

标签: python sql sql-server exception primary-key

MSSQL 2005 Server(IIRC)和Python模块_mssql ..我有多个插入到一个单行的表,这是主键..现在我可能多次插入相同的值,但我想简单地忽略"违反PRIMARY KEY约束" 。应该提出其他错误。

我知道我可以try: [...]INSERT[...] except: *magic*: pass但我无法找到发生的例外名称。

编辑:

我不知道这个解决方案是否可以接受,但它是我迄今为止所得到的。

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

1 个答案:

答案 0 :(得分:0)

您需要执行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()