我编写了一个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
查询后表格为空?
答案 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
一样 - 是非交易性的,因此无法滚动 返回,它们导致挂起的事务提交。