无法使用Python的MYSQLdb模块向DB添加行

时间:2012-05-28 21:04:41

标签: python mysql

对于我的生活,我无法弄清楚为什么以下模块不会向我的数据库添加新行。我可以使用命令行界面添加它们。我也可以使用其他方法添加它们(即将命令写入脚本文件并使用os.system('...'),但如果我使用cursor.execute(),则不会添加任何行(即使创建了表)。是一个最小的脚本,为您的观看乐趣。请注意,我运行此脚本时没有错误或警告

#!/usr/bin/env python

import MySQLdb

if __name__ == '__main__':
   db = MySQLdb.connect ( host="localhost", user="user", passwd="passwd", db="db" )
   cursor = db.cursor()

   cursor.execute ( 
   """
      CREATE TABLE IF NOT EXISTS god_i_really_hate_this_stupid_library
      (
         id            INT NOT NULL auto_increment,
         username      VARCHAR(32) NOT NULL UNIQUE,
         PRIMARY KEY(id)
      ) engine=innodb;
   """
   )

   cursor.execute ( 
   """
      INSERT INTO god_i_really_hate_this_stupid_library
      ( username )
      VALUES
      ( 'Booberry' );
   """
   )

   cursor.close()

2 个答案:

答案 0 :(得分:2)

您需要在连接上调用commit,否则所有更改都将自动回滚。

答案 1 :(得分:2)

来自MySQLdb的FAQ

  

从1.2.0开始,默认情况下,MySQLdb根据DB-API标准(PEP-249)的要求禁用自动提交。如果您使用的是InnoDB表或其他类型的事务表类型,则需要在关闭连接之前执行connection.commit(),否则您的更改都不会写入数据库。

     

相反,您也可以使用connection.rollback()来丢弃自上次提交以来所做的任何更改。

     

重要说明:某些SQL语句(特别是像CREATE TABLE这样的DDL语句)是非事务性的,因此无法回滚,并且它们会导致挂起的事务提交。

您可以致电db.autocommit(True)打开连接自动提交,或者只要您认为有必要,只需手动拨打db.commit()