3

我做了以下事情:

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(query)函数。

有没有人遇到过类似的情况?有什么解决办法吗?

4

4 回答 4

12

执行后使用conn.commit()提交/完成基于插入和删除的更改。

于 2015-06-30T13:46:26.327 回答
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().

请参阅使用 MySQLdb 执行多个 SQL 查询


另一方面,如果您的两个查询都是SELECT语句(您说“我看到了结果”),我不确定您是否可以仅通过一次调用execute(). 无论如何,我认为这是不好的风格。

于 2013-08-12T14:43:02.940 回答
0

这是一个函数,查询被传递给这个函数。当我一个接一个地执行一个查询时。我没有得到几个查询的结果,查询没有问题,因为我已经用 mysql 控制台交叉检查了它们。

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

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

# 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 错误?

于 2013-08-13T09:04:41.707 回答
0

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

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

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

conn.commit()
于 2020-01-15T03:47:34.867 回答