Python如何知道记录是不是成功插入

Posted

技术标签:

【中文标题】Python如何知道记录是不是成功插入【英文标题】: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

【问题讨论】:

【参考方案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

以上是关于Python如何知道记录是不是成功插入的主要内容,如果未能解决你的问题,请参考以下文章

$stmt->execute() : 如何知道数据库插入是不是成功?

mysql不是自动增长的主键怎么利用ibatis返回值判断是不是插入成功

如何使用python检测USB设备是不是插入?

如何查看以下 FMDatabase executeUpdate 语句是不是成功?

如何使用 Python MySQdb 检查记录是不是存在

JAVA里面如何判断插入/删除/更新数据库是不是成功