Python将数组插入mysql表列,避免记录重复

时间:2017-09-20 11:51:18

标签: python mysql

我有一个像这样的简单数组:

a=['a','b','c']

我需要将所有“a”元素插入到Mysql表'items'和列'names'中,以避免插入元素(如果它已经存在于'names'列中,避免迭代和多个INSERT查询。

由于

4 个答案:

答案 0 :(得分:1)

1)您可以使用MySQL特定的INSERT ... ON DUPLICATE KEY UPDATE语法。 (我假设列'名称'上有PRIMARY KEY或UNIQUE KEY)

(另外:a = list(set(a)) #to remove duplicates in a)。

a = ['a', 'b', 'c']
c = conn.cursor()
c.executemany('INSERT INTO items (name) VALUES (%s) ON DUPLICATE KEY UPDATE name = name', a)

2)如果列'name'上没有唯一性constriaint,您可以检查数据库中已有哪些名称,并从列表中删除它们以插入:

a = ['a', 'b', 'c']
c = conn.cursor()
c.execute('SELECT names from items')
existent_names = [name[0] for name in c]
a = list(set(a) - set(existent_names))

c.executemany('INSERT INTO items (name) VALUES (%s)', a)

答案 1 :(得分:0)

嗨,如果你不想在你的表'items'中有重复的'names',那么这应该是你的主键,当你尝试插入重复值时,mysql根本不会允许它。但是,如果您为表使用不同的主键,此代码可能会对您有所帮助:

import MySQLdb
conn = MySQLdb.connect(host= "localhost",
              user="root",
              passwd="yourpass",
              db="yourdb")
x = conn.cursor()    
a=['a','b','c']
for i in range (0,len(a))
  try:
   data = x.execute("""SELECT name FROM items WHERE name=%s """, a[i])
   data = cursor.fetchone()
     if data == None: 
       x.execute("""INSERT INTO items(name) VALUES(%s)""",a[i])
       conn.commit()
  except:
       conn.rollback()

答案 2 :(得分:0)

这是我从你的帖子中理解的。您希望将列表中的唯一值添加到数据库中。您可以使用python的set

a = ['a', 'b', 'c']
set_a = list(set(a))

inset_into_db(set_a)

答案 3 :(得分:0)

如果持有所有items.names的内存成本不高,您可以运行查询以选择所有items.names并将其保存在一个集合中。

cursor.execute('SELECT names from items')
names_set = set(name[0] for name in cursor)

在执行查询之前,请过滤掉此集合中的现有名称。

fresh_a = filter(lambda v: v not in names_set, a)

如果您担心a中的重复名称,可以将其投射到一组。