python:psql:insert-into-table-on条件

2024-06-16 09:24:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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))

我生成变量的方式有什么问题吗?你知道吗


Tags: executewhereinsertvaluescurintoopcfout
1条回答
网友
1楼 · 发布于 2024-06-16 09:24:04

如果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))

相关问题 更多 >