Python 捕捉MySQLdb上的更新错误

Python 捕捉MySQLdb上的更新错误,python,mysql,Python,Mysql,我有一个从CSV文件更新MySQL表的函数。MySQL表包含客户端帐号——这是我用来与CSV文件进行比较的。在某些情况下,某些查询将失败,因为正在与CSV文件进行比较的帐号尚未添加 如何从更新过程中失败的CSV文件中获取记录?我想将这些记录存储在一个单独的文件中,然后稍后重新读取该文件,直到所有记录都成功更新 下面是更新数据库的函数 def updateDatabase(records, options): """Update database""" import re # Re

我有一个从CSV文件更新MySQL表的函数。MySQL表包含客户端帐号——这是我用来与CSV文件进行比较的。在某些情况下,某些查询将失败,因为正在与CSV文件进行比较的帐号尚未添加

如何从更新过程中失败的CSV文件中获取记录?我想将这些记录存储在一个单独的文件中,然后稍后重新读取该文件,直到所有记录都成功更新

下面是更新数据库的函数

def updateDatabase(records, options):
    """Update database"""
    import re # Regular expression library
    import MySQLdb

    # establish DB connection
    try:
         db = MySQLdb.connect(host="localhost", user="root", passwd="", db="demo")
    except MySQLdb.Error, e:
         print "Error %d: %s" % (e.args[0], e.args[1])
         sys.exit (1)
    # create cursor
    cursor = db.cursor()
    # tell MySQLdb to turn off auto-commit
    db.autocommit(False) 

    # inform the user that this could take a while
    if len(records) > 499:
        print 'This process can take a while.'

    print 'Updating the database now...'
    # this is the actual loop
    maxrecords = len(records)
    for record in records:
        account_no, ag_1to15, ag_16to30, ag_31to60, ag_61to90, ag_91to120, beyond_120, total, status, credit_limit = record
        if re.match('1000', account_no):
            query = """UPDATE sys_accountscf SET cf_581 = %s, cf_583 = %s, cf_574 = %s, cf_575 = %s, cf_576 = %s, cf_577 = %s, cf_579 = %s, cf_585 = '%s', cf_558 = %s WHERE cf_538 = %s"""
        else:
            query = """UPDATE sys_accountscf SET cf_580 = %s, cf_582 = %s, cf_568 = %s, cf_569 = %s, cf_571 = %s, cf_572 = %s, cf_578 = %s, cf_584 = '%s', cf_555 = %s WHERE cf_535 = %s"""
        cursor.execute(query % (ag_1to15, ag_16to30, ag_31to60, ag_61to90, ag_91to120, beyond_120, total, status, credit_limit, account_no))
    # commit all changes and close database connection      
    try:
        db.commit()
    except:
        db.rollback()
    cursor.close()
    db.close()

更新查询返回受影响的行数。 在执行am execute后检查
光标。行计数将给出该数字。如果不是1,则表示更新行失败