2015-12-14 26 views
2

很抱歉,如果這個問題是愚蠢的,我AM 2天進學習python的Python不能修改MySQL,但用戶可以

我一直在打我的頭撞牆試圖理解爲什麼我的python腳本可以運行SELECT聲明但不是UPDATEDELETE陳述。

我相信這將是一個MySQL問題,而不是一個Python的問題,但我不再能夠排除故障

pcheck.py

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" 

和實際(和令人驚訝預期)輸出:

輸出

[email protected]:~/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 

但是,數據庫未被更新。我檢查了該查詢是它使得到MySQL:

MySQL的登錄

"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)" 

然而,對於行0GqQ0d6B proced值仍不1

如果我讓通過SQLyog的同一查詢(登錄以用戶身份)查詢按預期工作。

+2

進行更改後提交光標。 –

+0

使您的SQL查詢成爲Unicode字符串以減少UnicodeExceptions:「u」「」INSERT INTO table2(drule,dval,dmeta)VALUES('%s','%s','%s')「」「 –

+0

@ BobDylan工作得非常完美。在任何修改後,我是否總是「提交」「遊標」? –

回答

0

由於評論者Bob Dylan能夠推斷出更改後需要提交的光標。

0

這些問題可能會非常令人沮喪。你確定這裏沒有多餘的空間嗎?

print "row is:*"+row[0]+"*" 

也許註釋掉

for trigger in rchk: 

部分,和周圍灑些打印語句?

+0

謝謝你給我另一個可能的測試用例! –

相關問題