如何在插入两个表然后触发异常时知道表名

时间:2014-06-03 09:17:41

标签: python mysql sql

我的Python脚本将一些数据插入到两个表中,就像

一样
try:
    ...
    cur = conn.cursor()
    cur.execute('''insert into table_A values (%s,%s)''',(value_1,value_2))  
    cur.execute('''insert into table_B values (%s,%s,%s)''',(value_1,value_2,value_3))
    ...
except MySQLdb.Error, e:
    print "Error %d: %s" % (e.args[0], e.args[1])
    sys.exit (1)

脚本有问题:
当发生异常时(例如,'错误1062:重复条目'),很难知道'inserted table_A'抛出异常或者'insert table_B'抛出异常,有没有办法通过MySQLdb.Error知道表名。插入会触发异常吗?

3 个答案:

答案 0 :(得分:1)

如果要跟踪导致错误的查询,请使用全局变量来定义查询语句。当引发异常时,您可以使用相同的变量来调试它。

示例

globalVar = ""
try:
    ...
    cur = conn.cursor()
    globalVar = "insert into table_A values ( %s, %s )"
    cur.execute( globalVar, ( value_1, value_2 ) )  
    print "Row inserted in table_A" /* debug */

    globalVar = "insert into table_B values ( %s, %s, %s )"
    cur.execute( globalVar, ( value_1, value_2, value_3 ) )
    print "Row inserted in table_B" /* debug */

    ...
except MySQLdb.Error, e:
    print "Error %d: %s" % ( e.args[0], e.args[1] )
    print "SQL Query: %s" % globalVar /* debug in exception block */
    sys.exit (1)

正如您在日志跟踪中可以看到SQL查询一样,您可以轻松找出错误的位置和内容并采取措施。

答案 1 :(得分:0)

try:
    ...
    cur = conn.cursor()
    cur.execute('''insert into table_A values (%s,%s)''',(value_1,value_2)) 
    print 'table a inserted' 
    cur.execute('''insert into table_B values (%s,%s,%s)''',(value_1,value_2,value_3))
    print 'table b inserted'
    ...
except MySQLdb.Error, e:
    print "Error %d: %s" % (e.args[0], e.args[1])
    sys.exit (1)

缺少任何打印,然后上面的插入命令有错误

答案 2 :(得分:0)

我认为你可以尝试在separate try中运行它(基于Barmar评论)

try:
    ...
    cur = conn.cursor()
except MySQLdb.Error, e:
    print "Error Conecting the Database %d: %s" % (e.args[0], e.args[1])
    sys.exit (1)
try:
    cur.execute('''insert into table_A values (%s,%s)''',(value_1,value_2))  
except MySQLdb.Error, e:
    print "Error in table A %d: %s" % (e.args[0], e.args[1])
    sys.exit (1)
try:
    cur.execute('''insert into table_B values (%s,%s,%s)''',(value_1,value_2,value_3))
except MySQLdb.Error, e:
    print "Error Conecting in table B %d: %s" % (e.args[0], e.args[1])
    sys.exit (1)
...