Python + MySQLdb奇怪的问题
问题描述:
我在使用MySQLdb库时遇到了问题。我试图插入值到我的表,但MySQL不显示它们。更奇怪的是,当我使用命令提示符手动插入值时,主键正在改变。Python + MySQLdb奇怪的问题
要告诉你一个例子:
'786', '2011-02-16 14:52:38', NULL
'787', '2011-02-16 14:52:52', NULL
'792', '2011-02-16 14:53:25', NULL
我手动插入在786和787(主键)一些值,然后我跑我的Python脚本,停药之后我得到了4个值。我输入'SELECT * from table',我看不到有任何变化。然后我插入另一个值(手动)并显示一个新的主键'792'。这似乎是python脚本被删除的东西...
这里是我的Python代码:
try:
conn = MySQLdb.connect(host = "127.0.0.1",
user = "root",
passwd = "eBao1234",
db = "test")
cursor = conn.cursor()
print 'data base connected'
try:
while 1:
localtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
i = i + 1
aRead = ser.readline()
aSplit = aRead.split(",")
if aSplit[0] == "t":
print str(i) + ", " + localtime + ", " + aSplit[1]
tableName = "sampdb"
dbquery = "INSERT INTO %s (timestamp, tempReading) VALUES (NOW(), %s);" % (tableName, aSplit[1])
cursor.execute(dbquery)
except KeyboardInterrupt:
ser.close()
#csvResults.close()
#cursor.close()
#conn.close()
print "\nInterrupted."
raw_input("Press enter to exit.")
except Exception,e:
print str(e)
print 'error connecting to database'
cursor.close()
conn.close()
答
当您执行修改语句数据库,你必须承诺,如已经回答。如果您只使用SELECT,则不需要提交。注意自动提交,因为如果有其他人正在处理数据库,并且启用了自动提交功能,那么即使他/她没有完成或不想提交,他/她的更改也会在您执行脚本时被提交。
答
如果您(也)遇到执行不获取存储在数据库中的多个INSERT语句的问题,看看我的回答pymysql callproc() appears to affect subsequent selects
然而,待会儿我发现我的问题是,退出()执行得太快。 因此,我在调用exit()之前添加了time.sleep(3) - 它工作正常!
import time
time.sleep(3)
cur.close()
conn.close()
time.sleep(3)
exit()
更新: 同样的故事还没有结束......我在我的脚本后经历了类似的错误,从数据库中选择,而不是任何检索结果时。这似乎与提到的time.sleep(x)行为没有关系。
谢谢,conn.commit()工作! conn.autocommit()在哪里? – lamba 2011-02-16 15:57:29