为什么不插入/更新唯一键?

时间:2017-01-21 23:54:54

标签: python mysql

我编写了一个函数来获取列表列表并插入到我的数据库表中,但是,如果存在重复键,则其中一列将更新。我做错了什么?

def insert_or_update(self, data):
    try:
        self.cursor.executemany('''insert into landing_pages (profile_id, landing_page, keyword_count, unique_key)
                                    values (%s, %s, %s, %s) on duplicate key update keyword_count =values(keyword_count)''', (data))
        self.db.commit()
        return self.cursor.lastrowid
    except Exception as e:
        self.db.rollback()
        # Rollback in case there is any error
        return e
    finally:
        self.db.close()

更新: 对不起,忘了提一下实际问题(一整天都在工作)。它似乎没有更新,相反,它只是再次插入数据。

对于唯一键,我实际创建了一个盐渍哈希,这来自profile_id和landing_page列;哈希传递给unique_key列。

我的表格如下:

+---------------+---------------+------+-----+---------+----------------+
| Field         | Type          | Null | Key | Default | Extra          |
+---------------+---------------+------+-----+---------+----------------+
| id            | mediumint(9)  | NO   | PRI | NULL    | auto_increment |
| profile_id    | int(11)       | YES  |     | NULL    |                |
| landing_page  | varchar(2083) | YES  |     | NULL    |                |
| keyword_count | int(11)       | YES  |     | NULL    |                |
| unique_key    | varchar(200)  | YES  | UNI | NULL    |                |
+---------------+---------------+------+-----+---------+----------------+

2 个答案:

答案 0 :(得分:0)

假设keyword_countint,您可以在查询中更改以下内容:

update keyword_count =values(keyword_count)

update keyword_count = <value>

答案 1 :(得分:0)

我认为你表中的问题是自我解释的

您的密钥是 id

您要插入的值是 profile_id,landing_page,keyword_count,unique_key

没有一个与您的密钥发生冲突

在更新时有唯一键:

http://sqlfiddle.com/#!9/881082/1