MySQLdb.cursors.Cursor.execute不起作用

时间:2013-08-12 13:29:08

标签: python mysql mysql-python

我做了以下事情:

import MySQLdb as mdb
con = mdb.connect(hostname, username, password, dbname)
cur = con.cursor()
count = cur.execute(query)
cur.close()
con.close()

我有两个查询,我在mysql控制台中执行它们可以查看结果 但是当我通过python给出相同的查询时,一个查询起作用而另一个查询不起作用 我确信它不是mysql或查询或python代码的问题。我怀疑 cur.execute(查询)功能。

有没有人遇到类似的情况?有解决方案吗

4 个答案:

答案 0 :(得分:4)

Use conn.commit() after execution, to commit/finish insertion and deletion based changes.

答案 1 :(得分:0)

  

我有两个查询,我在mysql控制台中执行它们可以查看结果。

但我只看到一个查询:

import MySQLdb as mdb
con = mdb.connect(hostname, username, password, dbname)
cur = con.cursor()
count = cur.execute(query)
cur.close()
con.close()

我的猜测query包含两个查询,这些查询由一个搜索结果分隔,而是一个INSERT声明?您可能需要使用executemany()

请参阅Executing several SQL queries with MySQLdb


另一方面,如果您的两个查询都是SELECT个语句(您说“我结果”),我不确定您是否只能从两个结果中获取结果拨打execute()。无论如何,我认为这是一种糟糕的风格。

答案 2 :(得分:0)

  

这是一个函数,查询将传递给此函数。当我   在另一个之后执行一个查询。我很少得到结果   查询,查询没有问题,因为我已经越过了   用mysql控制台检查它们。

当你在评论中澄清了你的问题时,我发布了另一个答案 - 完全不同的方法。

您是否在自动提交模式下连接到数据库?如果不是,要永久应用更改,您必须COMMIT。在正常情况下,您不应为每个请求创建新连接。这对DB服务器造成了过多的负担,几乎没有:

# Open a connection once
con = mdb.connect(hostname, username, password, dbname)


# Do that *for each query*:
cur = con.cursor()
try:
    count = cur.execute(query)
    conn.commit() # don't forget to commit the transaction
else:
    print "DONE:", query # for "debug" -- in real app you migth have an "except:" clause instead
finally:
    cur.close() # close anyway


# Do that *for each query*:
cur = con.cursor()
try:
    count = cur.execute(query)
    conn.commit() # don't forget to commit the transaction
else:
    print "DONE:", query # for "debug" -- in real app you migth have an "except:" clause instead
finally:
    cur.close() # close anyway


# Close *the* connection
con.close()

以上代码直接输入SO。请原谅错别字和其他基本语法错误。但这就是它的精神。

最后一句话,在输入时我想知道你如何处理异常?有可能在程序的某个较高级别忽略MySQLdb错误吗?

答案 3 :(得分:0)

使用此查询,这将在一个查询中更新列的多行

sql=cursor.executemany("UPDATE `table` SET `col1` = %s WHERE `col2` = %s",
            [(col1_val1, col2_val1),(col2_val2, col_val2)])

,并提交数据库以查看更改。

conn.commit()