Python+MySQLdb奇怪的问题

Python+MySQLdb奇怪的问题,python,mysql,Python,Mysql,我在使用MySQLdb库时遇到问题。我试图在表中插入值,但MySQL没有显示它们。更奇怪的是,当我使用命令提示符手动插入值时,主键正在改变 要向您展示一个示例: '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个值后停止它。我键入“从表中选择*”,没有看到任何更

我在使用MySQLdb库时遇到问题。我试图在表中插入值,但MySQL没有显示它们。更奇怪的是,当我使用命令提示符手动插入值时,主键正在改变

要向您展示一个示例:

'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个值后停止它。我键入“从表中选择*”,没有看到任何更改。然后我手动插入另一个值,它显示一个新的主键“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,则不需要提交。使用自动提交时要小心,因为如果其他人正在处理数据库,而您启用了自动提交,则在您执行脚本时,他/她的更改将被提交,即使他/她没有完成或不想提交。

当您执行修改数据库的语句时,您必须提交,正如已经回答的那样。如果只使用SELECT,则不需要提交。使用autocommit时要小心,因为如果其他人正在处理数据库,而您启用了autocommit,则在您执行脚本时,他/她的更改将被提交,即使他/她尚未完成或不想提交。

如果您在执行多条INSERT语句时遇到问题,而这些语句没有存储到数据库中,看看我对这个问题的回答

然而,过了一会儿,我发现我的问题是退出太快了。 所以,我在调用exit之前添加了一个time.sleep3-它起作用了

import time
time.sleep(3)
cur.close()
conn.close()
time.sleep(3)
exit()
更新:
再说一次,故事还没有结束……我后来在脚本中遇到了一个类似的错误,当时我从数据库中进行选择,但没有检索任何结果。这似乎与提到的time.sleepx行为无关。

如果您在执行多个INSERT语句时遇到问题,而这些语句没有存储到数据库中,请查看我的答案

然而,过了一会儿,我发现我的问题是退出太快了。 所以,我在调用exit之前添加了一个time.sleep3-它起作用了

import time
time.sleep(3)
cur.close()
conn.close()
time.sleep(3)
exit()
更新:
再说一次,故事还没有结束……我后来在脚本中遇到了一个类似的错误,当时我从数据库中进行选择,但没有检索任何结果。这似乎与提到的time.sleepx行为无关。

通常在创建连接MySQLdb.connect之后。这是康涅狄格州。自动提交真的非常感谢,你为我节省了很多时间!通常在创建连接MySQLdb.connect之后。这是康涅狄格州。自动提交真的非常感谢,你为我节省了很多时间!