【问题标题】:Python how to know if a record inserted successfully or notPython如何知道记录是否成功插入
【发布时间】:2013-10-03 11:33:58
【问题描述】:

我正在使用 Python MySQL 连接器,我在数据库中插入了一条记录,并且成功。但是在 Python 代码中,我怎么知道它是否被插入呢? 我的表没有主键。

def insert(params) :
    db_connection = Model.get_db_connection()
    cursor = db_connection.cursor()
    try :
        cursor.execute("""INSERT INTO `User`(`UID`, `IP`) VALUES(%s,%s);""", (params))
        db_connection.commit()
    except :
        db_connection.rollback()
    Model.close_db(db_connection)
    return result

【问题讨论】:

    标签: python mysql mysql-connector


    【解决方案1】:

    你可以使用.rowcount属性:

    cursor.execute("""INSERT INTO `User`(`UID`, `IP`) VALUES(%s,%s);""", params)
    print("affected rows = {}".format(cursor.rowcount))
    

    .rowcount 这个只读属性指定了行数 最后生成的 .execute*() (对于像 SELECT 这样的 DQL 语句)或 受影响(对于像 UPDATE 或 INSERT 这样的 DML 语句)。 [9]

    【讨论】:

    • 还有一个问题@falsetru,我在发布这个问题之前使用了 .rowcount。但它抛出了一个错误“'int' cannot callable”。但现在它起作用了,我真的不知道为什么。
    • @GiaDuongDucMinh,您是否调用了类似 rowcount 的方法? .rowcount()?这不是一种方法。
    • 我记不太清了,但也许我犯了这个错误@falsetru。谢谢!
    • 这是在插入主键不自动递增的表时知道是否插入了 INSERT IGNORE... 的唯一方法。 (我知道是因为我刚遇到这个问题)。在这种情况下,检查 cursor.lastrowid 将始终为零。 (但当自动增量开启时,lastrowid 不会为零)
    • 请注意,如果您使用 UPDATE 语句,并且碰巧行更新的数据已经与数据库中的数据相同,则会有 匹配 行,但不会影响任何行,将.rowcount 保持在0
    猜你喜欢
    • 2010-12-12
    • 2015-10-02
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 2012-04-17
    相关资源
    最近更新 更多