2015-11-25 39 views
0

我一直遇到錯誤「psycopg2.ProgrammingError:column」none「does not exist」。psycopg2.ProgrammingError:列「none」不存在 - 更新語句

我已閱讀psycopg2 documentation看着這個錯誤的其他職位,但許多特定於插入查詢而非更新查詢

我的代碼如下: -

def send_to_sql(identity,list1,list2,list3): 
    userid = 30 
    Fixture_No = None 
    Home_Side_Score = None 
    Away_Side_Score = None 
    conn = psycopg2.connect("dbname='Euro2016' user='postgres' host='localhost' password='##passwordhere##'") 
    cur = conn.cursor() 
    cur.execute("""UPDATE "Predictions" SET userid = %r, "Fixture_No" = %r, "Home_Side_Score" = %r, "Away_Side_Score" = %r WHERE "Predictions"."userid" = %r AND "Predictions"."Fixture_No" = %r """ % (userid, Fixture_No, Home_Side_Score, Away_Side_Score, userid, Fixture_No)) 
    conn.commit() 
    cur.close() 
    conn.close() 

此代碼工作正常,如果我試圖通過分數和固定數量的數字,但是當無條目被,代碼落在它的臉上。有人救我...

+0

offtopic提示:使用準備好的語句http://initd.org/ psycopg/articles/2012/10/01/prepared-statements-psycopg /他們用外部變量創建sql的方式要安全得多 – kwarunek

回答

1

使用%s而不是%r。要檢查什麼被髮送到服務器使用cursor. mogrify

update = """ 
    UPDATE "Predictions" 
    SET 
     userid = %s, 
     "Fixture_No" = %s, 
     "Home_Side_Score" = %s, 
     "Away_Side_Score" = %s 
    WHERE 
     "Predictions"."userid" = %s AND 
     "Predictions"."Fixture_No" = %s 
""" 
data = (userid, Fixture_No, Home_Side_Score, Away_Side_Score, userid, Fixture_No) 
print cur.mogrify(update, data) 
cur.execute(update, data) 

仍然較好,使用字典來傳遞數據:

update = """ 
    UPDATE "Predictions" 
    SET 
     userid = %(userid)s, 
     "Fixture_No" = %(Fixture_no)s, 
     "Home_Side_Score" = %(Home_Side_Score)s, 
     "Away_Side_Score" = %(Away_Side_Score)s 
    WHERE 
     "Predictions"."userid" = %(userid)s AND 
     "Predictions"."Fixture_No" = %(Fixture_No)s 
""" 
data = dict (
    userid = userid, 
    Fixture_No = Fixture_No, 
    Home_Side_Score = Home_Side_Score, 
    Away_Side_Score = Away_Side_Score 
) 
+0

非常棒的幫助,這確實有用。剛剛使用'更新'你寫了'查詢',它做了這項工作。謝謝! – LemusThelroy

+0

出於興趣,爲什麼沒有發生類型錯誤?我在其他地方使用%s運行了一些單獨的代碼,但我仍然得到相同的錯誤。一般情況下,我可以做這種類型的錯誤發生。 – LemusThelroy

+0

@LemusThelroy目標列可以爲空嗎? –

相關問題