2011-02-16 54 views
0

我在使用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() 

回答

4

打开自动提交或提交更改,请参阅:My data disappeared!

+0

谢谢,conn.commit()工作! conn.autocommit()在哪里? – lamba 2011-02-16 15:57:29

0

当您执行修改语句数据库,你必须承诺,如已经回答。如果您只使用SELECT,则不需要提交。注意自动提交,因为如果有其他人正在处理数据库,并且启用了自动提交功能,那么即使他/她没有完成或不想提交,他/她的更改也会在您执行脚本时被提交。

1

如果您(也)遇到执行不获取存储在数据库中的多个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)行为没有关系。