2014-09-24 47 views
0

我的要求是如果id爲1,則將名稱字段更改爲sun。下面是我的代碼。它會在更新時拋出異常和打印錯誤嗎?.Is我在查詢或Python代碼上做了任何錯誤?更新查詢在python中拋出異常

 import MySQLdb 
    import datetime  
     a="sun" 
     b=1 
     sql="update selva set name=%s where selid=%d" 
     try: 
      cursor.execute(sql,[a,b]) 
      db.commit() 
     except: 
      print "error in update" 
      db.rollback() 

     db.close() 

任何幫助將不勝感激!

+0

您是否嘗試重新規劃異常,以便查看它是什麼? – BrenBarn 2014-09-24 06:15:39

+0

我是新手到python,我發現通過使用print在except塊中拋出的異常,即使我不知道哪種類型的異常拋出我的代碼 – Madhesh 2014-09-24 06:17:23

+1

然後不要抓住它!刪除try/except,讓Python向您報告異常。 – 2014-09-24 06:29:57

回答

3

查詢中的佔位符應%s,不%d。我修改了異常處理程序來捕獲和打印異常,並關閉finally子句中的數據庫連接,以確保它始終關閉。

import MySQLdb 
import datetime  
a="sun" 
b=1 
sql="update selva set name=%s where selid=%s" 
try: 
    cursor.execute(sql, [a, b]) 
    db.commit() 
except Exception, exc: 
    print "error in update" 
    print "Exception : %s" % exc 
    db.rollback() 
finally: 
    db.close() 
+0

謝謝,它的工作。 – Madhesh 2014-09-24 06:41:16

+0

請使用元組列表。 – 2014-09-24 06:42:07

+0

@sundarnatarajСундар:元組或列表或任何其他序列都可以。 – mhawke 2014-09-24 06:42:42

0

嘗試這種情況:

import MySQLdb 
import datetime  
    a="sun" 
    b=1 
    sql="update selva set name = '%s' where selid = '%d'" 
    cmd = sql % (a, b) 
    try: 
     cursor.execute(cmd) 
     db.commit() 
    except Exception, e: 
     print "error in update" 
     print repr(e) 
     db.rollback() 

    db.close() 

給,如果有打印出錯誤消息。

+0

現在異常不throws.but更新查詢不起作用 – Madhesh 2014-09-24 06:20:01

+0

@Madhesh怎麼樣在等於旁邊添加一些空格。我已經更新了我的答案。 – 2014-09-24 06:22:39

+1

你不想這樣做,通過字符串插值形成查詢。相反,您希望使用已經存在於OP中的參數化查詢。原因:字符串插值容易受到SQL注入攻擊,而參數化查詢則不容易。無論如何,你需要在'name'周圍加單引號。 – mhawke 2014-09-24 06:23:05

0

您可以使用execute調用這樣

cursor.execute ("update selva set name=%s where selid=%s", (a,b)) #passing a tuple with parameters 

cursor.execute ("update selva set name='%s' where selid=%d" % (a,b)) #passing a raw sql command with interpoled data