【问题标题】:Python: update/delete before insertPython:插入前更新/删除
【发布时间】:2015-12-08 22:12:25
【问题描述】:

每次我执行我的 python (sql) 代码时,它只会不断向我的表中添加越来越多的数据,越来越多的行它只会不断增长,不知何故我需要在将数据插入表之前更新或删除,但是我不知道怎么做。

这是我的代码:

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"

我现在将定义我的“MESS”,在这个例子中我有一个二维数组,可以这样说:

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

然后我将它插入到我的表中几次:它看起来像这样:

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

它每次都重复。每次我执行它时,它都会添加越来越多的行。所以我需要摆脱这种重复。

【问题讨论】:

  • 你的删除条件是什么?您是否需要在每次应用启动时删除所有数据?
  • 我不知道我只是想摆脱那个烂摊子,所以我不知道删除所有内容然后重新写入或检查和更新更好,这就是我问的原因:)跨度>
  • 你能在你的问题中定义你想要摆脱的“混乱”吗?这样我们就可以给你一些建议......

标签: python mysql python-2.7


【解决方案1】:

如果您需要删除重复数据,您应该使用 PK 和 UPSERT(如果不存在则插入,否则更新)。如果您每次都需要干净的数据库,只需在插入前运行 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);

请记住为所有 3 个字段创建唯一约束。

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

【讨论】:

  • UPSERT 在这种情况下听起来不错
  • 关于重复键更新 x = VALUES(x), y = VALUES(y), z = VALUES(z);
  • 使用Insert IGNORE INTO table(a,b,c) VALUES (1,2,3);,还需要定义PK。或唯一约束
  • 仍然重复值:(
  • CREATE TABLE table (a int,b int,c int);ALTER TABLE table ADD UNIQUE INDEX unq (a, b, c);插入INTO table (a,b,c) 值(1,2,3);INSERT INTO table (a,b,c) 值(1,2,3); -- 只添加了一次!
猜你喜欢
  • 2014-08-27
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 2011-05-05
  • 2015-04-10
  • 1970-01-01
相关资源
最近更新 更多