2015-07-20 47 views
0

我有一個psql表「inlezen」列「tagnaam」和「melding」。 現在,如果「tagnaam」等於一個變量「foutetag」,我想在字符串「meldingen」中插入一個字符串。python:psql:插入條件表

我已經嘗試了一些查詢,弄亂了語法,但無法讓它工作。 這是我的代碼:

cur.execute("INSERT INTO inlezen (melding) WHERE tagnaam == foutetag VALUES (%s)", ("Fout bij schrijven naar OPC Server",)) 
conn.commit() 

但它給錯誤:

Traceback (most recent call last): 
    File "OPCSchrijvenLezen.py", line 71, in <module> 
    cur.execute("INSERT INTO inlezen (melding) WHERE tagnaam == foutetag VALUES (%s)", ("Fout bij schrijven naar OPC Server",)) 
psycopg2.ProgrammingError: syntax error at or near "WHERE" 
LINE 1: INSERT INTO inlezen (melding) WHERE tagnaam == foutetag VALU... 

有誰知道什麼地方錯了這段代碼?

在此先感謝!馬蒂亞斯艾丁格的回答後

編輯:

我已經改變了代碼和錯誤改變了一點點:

Traceback (most recent call last): 
    File "OPCSchrijvenLezen.py", line 72, in <module> 
    cur.execute("INSERT INTO inlezen (melding) WHERE tagnaam = %s VALUES (%s)", (foutetag, "Fout bij schrijven naar OPC Server",)) 
psycopg2.ProgrammingError: syntax error at or near "WHERE" 
LINE 1: INSERT INTO inlezen (melding) WHERE tagnaam = 'Bakkerij.Devi... 
            ^

現在至少「看到」變量的內容。但是,變量周圍有單引號。我不確定他們是否應該在那裏。 如果我打印變量「foutetag」它只是顯示:

Bakkerij.Device1.DB100INT8 

,就像它在PSQL表。

我這是怎麼產生的變量:

foutetag = [item[0] for item in taglistwaardennieuw] 
foutetag = (", ".join(foutetag)) 

難道還有什麼錯我產生可變的方式嗎?

回答

1

如果foutetag是一個變量,那麼你就需要把它像這樣:

cur.execute("INSERT INTO inlezen (melding) WHERE tagnaam=%s VALUES (%s)", (foutetag, "Fout bij schrijven naar OPC Server",)) 

還要注意WHERE子句中的單=

INSERT語句不接受WHERE子句,因爲它將從頭開始創建一個新行。如果你想更新你的價值,使用:

cur.execute("UPDATE inlezen SET melding=%s WHERE tagnaam=%s", ("Fout bij schrijven naar OPC Server", foutetag)) 
+0

我已經在我的OP中回覆。 – RobbeM

+0

已更新。你的SQL語句從一開始就生病了 –

+0

謝謝,這個工作! – RobbeM