为什么我的脚本不生效,但我可以手动插入mysql?

6 投票
3 回答
4585 浏览
提问于 2025-04-15 16:48
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 个回答

1

如果你发现即使提交了数据,数据还是没有被存储,那你可以看看我对这个问题的回答:pymysql callproc() 似乎影响后续的选择

这里的基本思路是用 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()

这个方法有效!

3

你需要提交你的更改(通过输入 conn.commit()),因为默认情况下是关闭自动提交的(这也是合理的)。

18

如果没有特别的错误信息(换句话说,看起来一切正常,但插入的数据没有保存),请确保在执行完语句后调用 commit() 方法:

conn.commit()

撰写回答