【问题标题】:mysql insert error both in python and mysql command linepython和mysql命令行中的mysql插入错误
【发布时间】:2012-06-15 02:13:14
【问题描述】:

我想在 mysql db 中插入一些项目。

当我在我的 python 脚本中这样做时,我得到了:

错误 1062:密钥“product_code”的条目“222”重复。 product_code 是一个唯一字段。

当我在 mysql 命令行中执行此操作时,我得到:

Error 1205(HY000):Lock wait timeout超过;尝试重启事务。

mysql安装在win32上;表的引擎是 innodb。

代码:

conn = mdb.connect(user = 'root', passwd = '[REMOVED]', db = 'vancl')
cur = conn.cursor()

sql2 = "insert into vancl.vancl_query1(product_code) values('100000')"
print sql2
cur.execute(sql2)

cur.close()

【问题讨论】:

  • 也许是锁的问题...我现在连那张桌子都放不下。
  • 现在,我重新创建一个与上一个相同的表。在脚本中,没有报错,但实际上没有插入数据。在命令行中,插入 sql 效果很好。
  • 不幸的是我的python经验有限,所以这里必须有人插话。

标签: python mysql mysql-error-1062 mysql-error-1205


【解决方案1】:

现在,我重新创建一个与上一个相同的表。在脚本中,没有报错,但实际上没有插入数据。在命令行中,插入 sql 效果很好。

如果您使用像 InnoDB 这样的事务引擎,您的数据将不会被保存,因为 MySqlDb 默认关闭自动提交。要将数据实际保存到数据库,您必须调用 commit

conn = mdb.connect(user = 'root', passwd = '[REMOVED]', db = 'vancl')
cur = conn.cursor()

sql2 = "insert into vancl.vancl_query1(product_code) values('100000')"
print sql2

cur.execute(sql2)

//Commit the data
conn.commit() 

cur.close()

【讨论】:

    【解决方案2】:

    这意味着product_code 列上放置了唯一索引约束。唯一索引约束告诉 MySQL 一个字段不能有重复值,即每个字段必须是唯一的。当该值已存在于列中的某处时,尝试将值 222 插入到 product_code 中时,您会遇到“重复输入”错误。

    【讨论】:

    • 但该列不包含我插入的值。我的桌子上只有三样东西,所以我对此很有信心。即使我尝试更改其他值,我也会得到同样的错误。
    • 您尚未发布您正在使用的代码。您应该编辑您的问题并这样做。
    猜你喜欢
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 2016-07-30
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多