python:psql:在条件中插入表

时间:2015-07-20 09:43:07

标签: python postgresql psycopg2 psql

我有一个psql表“inlezen”,其中包含“tagnaam”和“melding”列。 现在我想在“meldingen”列中插入一个字符串,如果“tagnaam”等于变量“foutetag”。

我已经尝试了一些查询,但是无法使用它。 这是我的代码:

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...

有谁知道这段代码有什么问题?

提前致谢!

在Mathias Ettinger回答之后编辑:

我已经更改了代码,错误也发生了一些变化:

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 个答案:

答案 0 :(得分: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))