为什么空的MySQL数据库声称有重复项(Python3)?

为什么空的MySQL数据库声称有重复项(Python3)?,python,mysql,Python,Mysql,所以我有一个快速的函数,可以将数据(存储在Python字典中)上传到MySQL数据库 def uploadData(of_item): global DB_HOST global DB_USER global DB_PASSWORD global DB_DATABASE my_db = connector.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASSWORD, database=DB_DATABASE

所以我有一个快速的函数,可以将数据(存储在Python字典中)上传到MySQL数据库

def uploadData(of_item):
    global DB_HOST
    global DB_USER
    global DB_PASSWORD
    global DB_DATABASE
    my_db = connector.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASSWORD, database=DB_DATABASE, port=3306)
    my_db.autocommit = True
    my_cursor = my_db.cursor()
    print("\rThe DB pipeline is now connected.")
    slots_text = ", ".join([a[0] for a in of_item.items()])
    values_text = ", ".join(["'" + a[1].replace("'", "\\'") + "'" for a in of_item.items()])
    set_portion_text = ", ".join([a[0] + " = " + "'" + a[1].replace("'", "\\'") + "'" for a in of_item.items()])
    sql = 'INSERT INTO UsersData ({0}) VALUES ({1})'.format(slots_text, values_text)
    try:
        my_cursor.execute(sql)
        row_cnt = my_cursor.rowcount
        my_db.commit()
        my_cursor.close()
        my_db.close()
        print("\r" + str(row_cnt) + " is now in UsersData.")
        return [True, str(row_cnt)]
    except Exception as exception:
        print("\n".join(["The update failed for profileID: " + of_item['UniqueId'],
                         str(exception),
                         str(sql),
                         "*",
                         'Item:',
                         str(of_item),
                         "*"]))
        my_cursor.close()
        my_db.close()
        return [False, 0]
当前,
行位于-1,因此它应该是完全空的。但是,当我执行该函数时,我经常会遇到以下抛出错误:

1062(23000):键“profileId_2”的重复条目“abcdefghijklmnopqrstuvxyz-123”

现在,profileId_2就是这样:

...
  UNIQUE KEY `profileId_2` (`profileId`,`companyId`),
...
profileId
是用户的唯一ID,而
companyId
只是一个预设(在本例中为123)。奇怪的是,会有一个声称的副本,因为数据库中还没有任何内容


首先,是什么导致了这个错误?其次,我如何才能通过它并成功地将新条目附加到UsersData?

row\u cnt
是上一次查询插入的行数,而不是表中的行数。不要在查询中使用字符串替换,使用占位符并将值作为第二个参数提供给
my\u cursor.execute()
Oh,我懂了。那么,是否有一种游标方法可以让我知道整个表中的行数?否,请使用类似于来自UsersData的
SELECT COUNT(*)的查询