捕获MySQLdb上的更新错误

时间:2009-11-24 05:30:52

标签: python mysql

我有一个从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()

1 个答案:

答案 0 :(得分:1)

更新查询返回受影响的行数。 执行完成后检查Cursor.rowcount将给出该号码。如果不是1,则该更新行失败。