2015-12-08 2 views
2

Каждый раз, когда я выполняю свой код python (sql), он просто добавляет все больше и больше данных в мою таблицу, все больше и больше строк его постоянно растет, мне как-то нужно обновить его или удалить до INSERT 'данные в таблицу, но я не знаю, как это сделать.Python: обновлять/удалять перед вставкой

Вот мой код:

import MySQLdb 
from calculationmethod import Method 
class dbcclib(Method): 

def __str__(self): 
    """Return a string representation of the object.""" 
    return "Density matrix of" % (self.data) 

def __repr__(self): 
    """Return a representation of the object.""" 
    return 'Density matrix("%s")' % (self.data) 
def push(self): 
    # Open database connection 
    dbhost1 = raw_input("Enter databse host: ") 
    dbport = int(raw_input("Enter databse port: ")) 
    dbuser = raw_input("Enter dabase user: ") 
    dbpass = raw_input("Enter databse password: ") 
    dbname = raw_input("Enter database: ") 

    db = MySQLdb.connect(host = dbhost1,port = dbport,user = dbuser,passwd = dbpass , db = dbname) 

    # prepare a cursor object using cursor() method 
    cur = db.cursor() 

    # Create table as per requirement 
    self.data.vibstate 
    cur.executemany(""" 
    INSERT INTO 
     cord 
     (x, y, z) 
     VALUES 
      (%s, %s, %s) 
    """, self.data.vibstate) 
    db.commit() 
    # disconnect from server 
    db.close() 
    print "Baigta" 

я сейчас определить свою «каше», в этом примере у меня есть 2D массив позволяет сказать, что его так:

a = [[1,2,3],[3,2,1]] 

и сейчас, то я INSERT'ing его пару раз в моей таблице: она выглядит следующим образом:

columns  x y z 
      1 2 3 
      3 2 1 
      1 2 3 
      3 2 1 

его дублирующие каждый раз. Каждый раз, когда я выполняю его, он добавляет все больше строк. Поэтому мне нужно избавиться от этого дублирования.

+0

Что вы хотите удалить? вам нужно удалять все данные при каждом запуске приложения? –

+0

Я не знаю, я просто хочу избавиться от этого беспорядка, поэтому я не знаю, лучше ли это удалить evrything, а затем снова написать или проверить и обновить, вот почему я спрашиваю :) –

+0

Можете ли вы определить «MESS», что вы хотите избавиться от своего вопроса? Чтобы мы могли предложить вам кое-что .... –

ответ

1

Если вам нужно избавиться от дублированных данных, вы должны использовать PK и UPSERT (Insert, если не существует, а еще обновление). если вам нужно очистить db каждый раз, просто запустите truncate команда перед вставкой. При использовании Mysql следующую структуру:

INSERT INTO table (a,b,c) VALUES (1,2,3) 
ON DUPLICATE KEY UPDATE c=c+1; 

Проверить это link

Если вы не хотите изменить, и просто нужно избавиться от дублирования пользователя INSERT IGNORE вместо этого.

INSERT IGNORE INTO table (a,b,c) VALUES (1,2,3); 

Не забудьте создать уникальные ограничения для всех трех полей.

ALTER TABLE table ADD UNIQUE INDEX unq (a, b, c) 
+0

UPSERT звучит нормально для этой ситуации –

+0

ON DUPLICATE KEY UPDATE x = ЦЕННОСТИ (x), y = VALUES (y), z = VALUES (z); –

+0

Пробовал делать это, но не работал :( –

Смежные вопросы