INSERT查询执行但使用MySQLdb表是空的

时间:2014-12-11 15:21:58

标签: python mysql mysql-python

我编写了一个Python脚本,执行一些查询,如下所示:

cur.execute('CREATE DATABASE IF NOT EXISTS testdb;')

table = """CREATE TABLE IF NOT EXISTS links (
             keyword VARCHAR(30) NOT NULL,
             url VARCHAR(30) NOT NULL)"""

cur.execute(table)

从MySQL shell我发现没有错:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| testdb             |
+--------------------+
4 rows in set (0.02 sec)


mysql> SHOW TABLES;
+--------------------+
| Tables_in_testdb   |
+--------------------+
| links              |
+--------------------+
1 row in set (0.00 sec)

问题是INSERT查询,它带有两个参数:

cur3.execute("INSERT INTO links(keyword,url) VALUES(%s,%s);",(sys.argv[1],link))

检查MySQL有错误:

mysql> SELECT * from links;
Empty set (0.00 sec)

为什么在执行INSERT查询后表格为空?

1 个答案:

答案 0 :(得分:3)

确保使用Connection.commit提交更改:

cur3.execute("INSERT INTO links(keyword, url) VALUES(%s, %s)", (sys.argv[1], link))
connection_object.commit()

根据MySQLdb FAQ - My data disappeared! (or won't go away!)

  

从1.2.0开始,MySQLdb默认禁用自动提交,如   DB-API标准(PEP-249)要求的。如果您使用的是InnoDB   表格或某些其他类型的交易表类型,您需要   在关闭连接之前执行connection.commit(),否则不执行任何操作   您的更改将写入数据库。

     

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

     

重要说明:一些SQL语句 - 特别是DDL语句   像CREATE TABLE一样 - 是非交易性的,因此无法滚动   返回,它们导致挂起的事务提交。