为什么我的脚本不能正常工作,但是我可以手动插入mysql?

时间:2009-12-08 21:05:47

标签: python mysql database

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)

3 个答案:

答案 0 :(得分:17)

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

conn.commit()

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

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

过了一会儿,我发现实际问题是exit()执行得太快,因此,数据不会存储在数据库中。

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

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

cur.close()
conn.close()
time.sleep(2)
exit()

有效!