回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>抱歉,如果这个问题很愚蠢,我已经学了2天了<code>python</code></p>
<p>我一直想弄明白为什么我的<code>python</code>脚本可以运行<code>SELECT</code>语句,但不能运行<code>UPDATE</code>或<code>DELETE</code>语句。你知道吗</p>
<p>我相信这将是一个<code>MySQL</code>问题,而不是一个<code>Python</code>问题,但我不再能够排除故障</p>
<p><strong>检查.py</strong></p>
<pre><code>import re
import time
import json
import MySQLdb
import requests
from array import *
conn = MySQLdb.connect([redacted])
cur = conn.cursor()
sql1 = "SELECT pkey,pmeta FROM table1 WHERE proced = 0 LIMIT 1"
cur.execute(sql1)
row = cur.fetchone()
while row is not None:
print "row is: ",row[0]
rchk = [
r"(SHA256|MD5)",
r"(abc|def)"
]
for trigger in rchk:
regexp = re.compile(trigger)
pval = row[1]
if regexp.search(pval) is not None:
print "matched on: ",row[0]
sql2 = """INSERT INTO table2 (drule,dval,dmeta) VALUES('%s', '%s', '%s')"""
try:
args2 = (trigger, pval, row[1])
cur.execute(sql2, args2)
print(cur._last_executed)
except UnicodeError:
print "pass-uni"
break
else:
pass
sql3 = """UPDATE table1 SET proced=1 WHERE pkey=%s"""
args3 = row[0]
cur.execute(sql3, args3)
print(cur._last_executed)
row = cur.fetchone()
sql3 = """DELETE FROM table1 WHERE proced=1 AND last_update < (NOW() - INTERVAL 6 MINUTE)"""
cur.execute(sql3)
print(cur._last_executed)
cur.close()
conn.close()
print "Finished"
</code></pre>
<p>以及实际(和令人惊讶的预期)输出:</p>
<p><strong>输出</strong></p>
<pre><code>scrape@:~/python$ python pcheck.py
row is: 0GqQ0d6B
UPDATE table1 SET proced=1 WHERE pkey='0GqQ0d6B'
DELETE FROM table1 WHERE proced=1 AND last_update < (NOW() - INTERVAL 6 MINUTE)
Finished
</code></pre>
<p>但是,数据库没有更新。我检查了查询是否进入MySQL:</p>
<p><strong>MySQL日志</strong></p>
<pre><code>"2015-12-14 22:53:56","localhost []","110","0","Query","SELECT `pkey`,`pmeta` FROM `table1` WHERE `proced`=0 LIMIT 200"
"2015-12-14 22:53:57","localhost []","110","0","Query","UPDATE `table1` SET `proced`=1 WHERE `pkey`='0GqQ0d6B'"
"2015-12-14 22:53:57","localhost []","110","0","Query","DELETE FROM table1 WHERE proced=1 AND last_update < (NOW() - INTERVAL 6 MINUTE)"
</code></pre>
<p>但是,第0gq0d6b行的<code>proced</code>值仍然不是1</p>
<p>如果我通过Sqlyog(以用户身份登录)进行相同的查询,查询将按预期工作。你知道吗</p>