为什么 psycopg2 IntegrityError 没有被捕获?
Why is psycopg2 IntegrityError not being caught?
我有一些尝试写入数据库的代码,在某些情况下由于唯一性约束而出现(预期的)完整性错误。我正试图捕捉到错误,但出于某种神秘的原因我无法捕捉到。我的代码看起来像这样(运行在一个循环中,为清楚起见进行了简化):
from psycopg2 import IntegrityError
try:
data = {
'one': val1,
'two': val2
}
query=tablename.insert().values(data)
target_engine.execute(query)
except IntegrityError as e:
print "caught"
except Exception as e:
print "uncaught"
print e
break
我 运行 脚本的输出如下所示:
uncaught
(psycopg2.IntegrityError) duplicate key value violates unique constraint "companies_x_classifications_pkey"
DETAIL: Key (company_id, classification_id)=(37802, 304) already exists.
[SQL: 'INSERT INTO companies_x_classifications (company_id, classification_id) VALUES (%(company_id)s, %(classification_id)s)'] [parameters: {'classification_id': 304, 'company_id': 37802L}]
它甚至从不打印 "caught",所以它认为我没有完整性错误。然而,当我打印错误时,它是一个完整性错误。
任何帮助将不胜感激!
由于您使用的是 sqlalchemy,请尝试:
from sqlalchemy.exc import IntegrityError
try:
...
except IntegrityError as e:
print "caught"
sqlalchemy
将 psycopg2
异常包装到它自己的异常中
我有一些尝试写入数据库的代码,在某些情况下由于唯一性约束而出现(预期的)完整性错误。我正试图捕捉到错误,但出于某种神秘的原因我无法捕捉到。我的代码看起来像这样(运行在一个循环中,为清楚起见进行了简化):
from psycopg2 import IntegrityError
try:
data = {
'one': val1,
'two': val2
}
query=tablename.insert().values(data)
target_engine.execute(query)
except IntegrityError as e:
print "caught"
except Exception as e:
print "uncaught"
print e
break
我 运行 脚本的输出如下所示:
uncaught
(psycopg2.IntegrityError) duplicate key value violates unique constraint "companies_x_classifications_pkey"
DETAIL: Key (company_id, classification_id)=(37802, 304) already exists.
[SQL: 'INSERT INTO companies_x_classifications (company_id, classification_id) VALUES (%(company_id)s, %(classification_id)s)'] [parameters: {'classification_id': 304, 'company_id': 37802L}]
它甚至从不打印 "caught",所以它认为我没有完整性错误。然而,当我打印错误时,它是一个完整性错误。 任何帮助将不胜感激!
由于您使用的是 sqlalchemy,请尝试:
from sqlalchemy.exc import IntegrityError
try:
...
except IntegrityError as e:
print "caught"
sqlalchemy
将 psycopg2
异常包装到它自己的异常中