Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';这两种实现“复制增量”的方法有什么区别?_Python_Mysql_Sql_Database - Fatal编程技术网

Python 什么';这两种实现“复制增量”的方法有什么区别?

Python 什么';这两种实现“复制增量”的方法有什么区别?,python,mysql,sql,database,Python,Mysql,Sql,Database,假设我有一个表user\u count定义如下: id primary key, auto increment user_id unique count default 0 我要做的是,当用户的现有记录存在时,按1递增count,或者插入新记录 目前,我是这样做的(在Python中): 也可以通过以下方式实现: cursor.execute("INSERT INTO user_count (user_id) VALUES (user_id

假设我有一个表
user\u count
定义如下:

   id          primary key, auto increment
   user_id     unique
   count       default 0
我要做的是,当用户的现有记录存在时,按1递增
count
,或者插入新记录

目前,我是这样做的(在Python中):

也可以通过以下方式实现:

cursor.execute("INSERT INTO user_count (user_id) VALUES (user_id) ON DUPLICATE KEY UPDATE count = count + 1", user.id)

这两种方法有什么区别,哪种更好?

第一种方法使用异常来引导程序的流程,除非您没有其他解决方案(例如,以独占方式访问文件),否则您不应该这样做。此外,它从数据库中获取工作,数据库应该更了解如何处理该案例

第二个代码处理数据库中的所有工作,这反过来可以非常有效地优化查询计划


我会使用第二种解决方案,因为数据库通常比您更了解如何处理案例。

第二种解决方案是一个SQL命令,它利用数据库提供的功能精确解决您在这里遇到的问题

它会使用它,因为它应该更快更可靠


如果该功能不可用(较旧的数据库版本?),第一个是回退功能。

+1-为异常保留异常。我完全支持让数据库做他们擅长的事情,而不是在应用程序代码中添加额外的条件
cursor.execute("INSERT INTO user_count (user_id) VALUES (user_id) ON DUPLICATE KEY UPDATE count = count + 1", user.id)