我在Python中运行程序时收到此错误。 这是我的数据库表:
Field Type Collation Null Key Default
articleCode varchar(25) latin1_swedish_ci NO UNI
dateReceived datetime NULL NO MUL 0000-00-00 00:00:00
s100RSD datetime NULL YES 0000-00-00 00:00:00
remarks longtext latin1_swedish_ci YES
为了简化我的程序问题,我将在这里找出导致错误的程序部分:
import MySQLdb
def main():
dateReceived = '2011-10-07 01:06:30'
articleCode = 'name'
s100rsd = '2011-10-07 01:06:30'
remark_text = 'This is a remark'
db = MySQLdb.connect('server', 'user', 'passwd', 'table_name', port)
cur = db.cursor()
db_query = cur.execute("INSERT INTO tblS100CurrentListing (articleCode, dateReceived, s100RSD, remarks) VALUES ('articleCode', 'dateReceived', 's100rsd', 'remark_text')")
cur.close()
db.close()
if __name__ == '__main__':
main()
这是我得到的错误:_mysql_exceptions.IntegrityError:(1062,“密钥1的重复条目'2147483647”)
感谢您的帮助!
答案 0 :(得分:2)
您似乎将常量插入数据库,而不是实际值。相反,尝试类似的东西;
db_query = cur.execute("INSERT INTO tblS100CurrentListing " +
"(articleCode, dateReceived, s100RSD, remarks) VALUES (%s, %s, %s, %s)",
(articleCode, dateReceived, s100rsd, remark_text))
答案 1 :(得分:2)
这是因为Key的限制。如果是INTEGER,则2147483647是限制。您可以选择BIGINT或比INTEGER更大的东西。 2147483647之后的所有记录都将尝试写入值2147483647.因此,这就是您遇到此问题的原因。用BIGINT / LARGEINT或类似的东西改变它。
希望它有所帮助。
答案 2 :(得分:1)
字段上的唯一键" articleCode" 阻止MySQL在此列中具有两条具有相同内容的记录。好像你已经在第一个程序运行中插入了一个。
使用 articleCode =' name' 删除以前插入的记录,或删除 articleCode 字段上的UNIQUE KEY或尝试插入不同的articleCode值。
希望这有帮助!
答案 3 :(得分:0)
按照其他答案中的描述更正代码后,您应该修改表格以重置其auto_increment计数器。
ALTER TABLE tblS100CurrentListing auto_increment=1
应将计数器重置为可能的最低值。
需要从表中删除或修复错误值;否则改变不会有任何影响。
此外,是否真的需要插入一个设置为auto_increment的字段?或者这是恢复过程的一部分?否则,这两件事是多余的:要么自动获取数据,要么插入数据。两者都可以(如图所示)导致冲突。