我做了以下事情:
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(查询)功能。
有没有人遇到类似的情况?有解决方案吗
答案 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()