0

当我在 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, "Duplicate entry '2147483647' for key 1")

感谢你的帮助!

4

4 回答 4

2

您似乎将常量插入数据库,而不是您的实际值。相反,尝试类似的东西;

db_query = cur.execute("INSERT INTO tblS100CurrentListing " +
    "(articleCode, dateReceived, s100RSD, remarks) VALUES (%s, %s, %s, %s)", 
    (articleCode, dateReceived, s100rsd, remark_text))
于 2012-07-11T06:09:48.220 回答
2

这是因为 Key 的限制。如果是 INTEGER,则限制为 2147483647。您可以选择像 BIGINT 或大于 INTEGER 的东西。2147483647 之后的所有记录都将尝试写入值 2147483647。所以这就是您遇到此问题的原因。用 BIGINT / LARGEINT 或类似的东西改变它。

希望能帮助到你。

于 2012-09-07T15:26:17.283 回答
1

字段“articleCode”上的唯一键防止 MySQL 在此列中具有相同内容的两条记录。好像您已经在第一个程序运行时插入了一个。

使用articleCode = 'name'删除以前插入的记录,或者删除articleCode字段上的 UNIQUE KEY,或者尝试插入不同的 articleCode 值。

希望这可以帮助!

于 2012-07-11T06:09:48.903 回答
0

在按照其他答案中的描述更正代码后,您应该修改表以重置其 auto_increment 计数器。

ALTER TABLE tblS100CurrentListing auto_increment=1

应将计数器重置为可能的最低值。

需要从表中删除或修复错误值;否则更改不会有任何影响。

此外,是否真的需要插入一个设置为 auto_increment 的字段?或者这是恢复过程的一部分?否则,这两件事是多余的:要么自动获取数据,要么插入数据。两者都可以(如所见)导致冲突。

于 2012-07-11T07:27:37.577 回答