【问题标题】:Why doesn't my script work, but I can manually INSERT into mysql?为什么我的脚本不起作用,但我可以手动插入到 mysql 中?
【发布时间】:2010-12-24 14:22:46
【问题描述】:
conn = MySQLdb.connect(host='db1', user='user', passwd='pass', db='db', port=3306)
cursor = conn.cursor()

count = int(sys.argv[1])
x = 0
while x < count:
    x += 1
    cursor.execute("INSERT INTO auth_group(name) VALUES(%s)", (str(x)))
    #if I change %s to 'kkkk', it doesn't work either.

    print str(x) + ' / ' + str(count)
print 'done'

但是...如果我进入“mysql -uuser -ppass db”,它可以工作:

mysql > INSERT INTO auth_group(name) VALUES('kkkkk');

我不知道这是否是个问题……但我之前遇到了复制问题。

我想在数据库中插入 99999 行。但它是空的。

mysql> select * from auth_group;
Empty set (0.33 sec)

【问题讨论】:

  • 您介意告诉我们,它到底是怎么行不通的吗?

标签: python mysql database


【解决方案1】:

如果没有特定的错误消息(换句话说,它似乎可以工作,但插入没有粘住),请确保在语句之后 commit():

conn.commit()

【讨论】:

  • 我不知道你的评论是什么意思,但我强烈建议不要打开自动提交,除非你完全确定你想要它(提示:你不需要)。交易是有原因的。使用它们。
【解决方案2】:

您必须提交(通过发出conn.commit()),因为默认情况下自动提交是关闭的(这是理所当然的)。

【讨论】:

    【解决方案3】:

    如果您的数据在提交后也没有被存储,请查看我对此问题的回答:pymysql callproc() appears to affect subsequent selects

    基本思想是使用 executemany() 而不是 execute() 来获取存储的数据。 (Python 3.2 的 pymysql 0.5)。

    稍后我发现实际问题是 exit() 执行速度太快,因此数据没有存储在数据库中。

    所以,最后问题似乎解决了:

    […]
    cur.execute("insert into …")
    import time
    time.sleep(2)
    
    cur.close()
    conn.close()
    time.sleep(2)
    exit()
    

    有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 2016-11-03
      • 2012-10-07
      • 2015-10-14
      • 1970-01-01
      相关资源
      最近更新 更多