MySQLdb python在列上插入行或增量计数(如果存在)

时间:2013-06-24 23:35:46

标签: python mysql python-2.7 mysql-python

我在MySQL中有一个简单的表,如下所示:

> ID |用户名|计数

我想用python实现的目标是:

  • 将用户名添加到表中,如果不存在,则将count设置为1.
  • 每当用户名存在时,将计数增加1。

在python 2.7中使用MySQLdb的最佳方法是什么

当然我可以通过查询用户名来做到这一点,然后如果存在更新计数,但也许有更好的方法来做到这一点。

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一种使用@johnthexii提供的链接(demo)的方法(它只使用MySQL,所以它不是特定于Python的)

CREATE TABLE UserNames (`username` varchar(35) unique, `duplicates` int);

INSERT INTO UserNames (`username`, `duplicates`)
 VALUES ('stackoverflow.com', 0);

INSERT INTO UserNames (`username`, `duplicates`)
 VALUES ('dba.stackexchange.com/', 0)
 ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1;

INSERT INTO UserNames (`username`, `duplicates`)
 VALUES ('stackoverflow.com', 0)
 ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1;

以下是对所发生情况的细分:username字段被标记为唯一,因此任何尝试插入具有现有用户名的记录都将在数据库级别失败。然后INSERT语句有一个额外的

ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1

这告诉MySQL,不要让INSERT失败,只需取duplicates列并递增1。运行三个INSERT命令时,您将看到两条记录,stackoverflow.com的{​​{1}}值为1,而duplicates的{​​{1}}值为0。