python: psql: 在条件下插入 table
python: psql: insert into table on conditions
我有一个包含列 "tagnaam" 和 "melding" 的 psql table "inlezen"。
现在我想在 "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...
^
现在它"sees"变量的内容最少了。但是,变量周围有单引号。我不确定他们是否应该在那里。
如果我打印变量 "foutetag" 它只显示:
Bakkerij.Device1.DB100INT8
,就像在 psql table.
中一样
这是我生成变量的方式:
foutetag = [item[0] for item in taglistwaardennieuw]
foutetag = (", ".join(foutetag))
我生成变量的方式有什么问题吗?
如果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))
我有一个包含列 "tagnaam" 和 "melding" 的 psql table "inlezen"。 现在我想在 "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...
^
现在它"sees"变量的内容最少了。但是,变量周围有单引号。我不确定他们是否应该在那里。 如果我打印变量 "foutetag" 它只显示:
Bakkerij.Device1.DB100INT8
,就像在 psql table.
中一样这是我生成变量的方式:
foutetag = [item[0] for item in taglistwaardennieuw]
foutetag = (", ".join(foutetag))
我生成变量的方式有什么问题吗?
如果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))