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返回值判断是不是插入成功