为什么空的MySQL数据库声称有重复项(Python3)?
所以我有一个快速的函数,可以将数据(存储在Python字典中)上传到MySQL数据库为什么空的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
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(*)的查询