Python MySQL Connector - 游标不会提交()

时间:2015-04-14 14:17:08

标签: python mysql mysql-connector-python

我有python(3.4)代码,光标不会将其提交到数据库。如果我通过My​​SQL客户端手动输入更改,我可以提交更改(所以我确定我对相关表有UPDATE权限。此代码仅使用csv文件中的信息更新表:

#!/bin/python3.4
import mysql.connector
import csv
import sys

cnx = mysql.connector.connect(user='me', password=sys.argv[1] , host="localhost", database="mydb")
cursor = cnx.cursor()
csvfile = open("products.csv", 'r', newline='')
products = csv.DictReader(csvfile, delimiter = ',', quotechar='"', skipinitialspace=True)

update_product= ("UPDATE products SET "
    "ticket_price = %(ticket_price)s, "
    "quantity_ordered = %(quantity_ordered)s "
    "WHERE product_code = \"%(product_code)s\";"
)
for row in products:
    data = {
        "product_code":row["product_code"],
        "ticket_price":row["ticket_price"],
        "quantity_ordered":row["quantity_ordered"]
    }
    cursor.execute(update_product, data)
    print(row["product_code"] + " quantity_ordered: " + row["quantity_ordered"])
# Commit to the database
cnx.commit()
cursor.close()
csvfile.close()
cnx.close()

因为它是一个准备好的语句,我不相信我可以检索执行的实际SQL字符串(但调用print(update_product % data)让我看看语句应该如何出现)。从手动复制粘贴到python解释器,我相信SQL没问题(cursor.fetchwarnings()没有抱怨)。输入数据很好; print语句正确读取。它只是不会提交 - 数据库中的所有信息对于这些行保持为零。我把这个剧本比作一个几乎完全相同的剧本,但似乎没什么不同。我也试过了cnx.autocommit = True,这也不起作用。

任何人都知道出了什么问题,或者如何获得cursor.execute()connector.commit()返回状态以便我可以调试? The API似乎没有提及,测试让我相信这些方法实际上并没有返回值。因为这个我觉得有点失明 - 我应该叫一种方法,并祈祷有什么事情发生?

修改 出于沮丧,我刚刚使用print(update_product % data)生成了一个SQL文件。数据库接受它就好了。我也可以通过python更新products表和静态值,但不能用动态值更新。

1 个答案:

答案 0 :(得分:0)

我认为如果事务被提交,python的.commit()将返回true,如果存在错误(即回滚),则返回false。 所以你可以这样做:

而不仅仅是拥有cx.close;

myVariable = cx.close
if(myVariable == true)
    print 'Transaction committed'  //Or whatever action you want to perform

else if(myVariable == false)
    print 'Rollback occurred'   //Or whatever action you want to perform

然后你可以检查打印的声明以了解发生了什么