我的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知道表名。插入会触发异常吗?
答案 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)
...