python:psycopg2:psql:删除条件所在的行

标签 python postgresql psql

我正在尝试根据条件从 psql 表中删除行。

如果“TagNaam”列等于变量 var_tagnaam,我希望删除所有行。

我已经尝试了以下代码和一些变体,但我无法让它工作。 不过没有任何错误。

cur.execute("DELETE FROM opc_actuelewaardentags WHERE 'TagNaam' = %s", (var_tagnaam,))

语法有问题吗?

编辑: 也许用额外的代码更清楚,错误可能在其他代码中?

for i in range(len(taginhoud)):
    (var_tagnaam, var_tagwaarde, var_tagkwaliteit, var_tagtime) = taginhoud[i]
    print (var_tagnaam)

    cur.execute("DELETE FROM opc_actuelewaardentags WHERE 'TagNaam' = %s", (var_tagnaam,))
    conn.commit()

    cur.execute('INSERT INTO opc_actuelewaardentags ("TagNaam", "TagWaarde", "TagKwaliteit", create_date, write_date) VALUES (%s,%s,%s,now(),now())',
                (var_tagnaam, var_tagwaarde, var_tagkwaliteit))   
    conn.commit()

所以我在这里尝试做的是:

从列表“taginhoud”中检索“var_tagnaam”。

然后在表 opc_actuelewaardentags 中找到列“Tagnaam”等于“var_tagnaam”中的值的所有行。 (应该是字符串)

然后删除那些“Tagnaam”=“var_tagnaam”的行。这部分不起作用。

然后插入带有数据的新行。这部分有效。

这段代码会不会做我想做的事情是错误的?

我已经尝试了很多方法来解决大写/小写问题。

编辑 2:pgadmin 中的查询有效,试图在 python 中做同样的事情:

我在 pgadmin 中运行了这个查询,它删除了行:

delete FROM opc_actuelewaardentags where "TagNaam" = 'Bakkerij.Device1.DB100INT8';

我试图让它在 python 中尽可能相似:

var_tagnaam2 = "'"+var_tagnaam+"'"
cur.execute("DELETE FROM opc_actuelewaardentags WHERE \"TagNaam\" = %s", (var_tagnaam2,))
conn.commit()

试图转义双引号以使其与 pgadmin 中的相同。

最佳答案

'TagNaam' 不是 sql 语言中的有效 column_name 标识符。数据库名、表名、列名不能使用单引号或双引号,可以使用撇号(`)。

无效:

DELETE FROM opc_actuelewaardentags WHERE 'TagNaam' = 'test';

DELETE FROM opc_actuelewaardentags WHERE "TagNaam"= 'test';

有效:

DELETE FROM opc_actuelewaardentags WHERE TagNaam = 'test';
DELETE FROM opc_actuelewaardentags WHERE `TagNaam` = 'test';
DELETE FROM opc_actuelewaardentags WHERE "TagNaam" = 'test';

更新:根据 PSQL 文档,双引号是表名和列名中的有效字符。当使用 a 作为表名或列名时,它特别用于关键字。所以以下是有效的:

DELETE FROM opc_actuelewaardentags WHERE "TagNaam" = 'test';

More is here...

关于python:psycopg2:psql:删除条件所在的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31557559/

相关文章:

python - Python 正则表达式如何忽略模式的一部分而不是整个表达式中的大小写?

PostgreSQL 9.3 : changing the value of SYSTEM parameters like log_lock_waits

sql - 在 Postgres SQL 中,如果分组中的任何行为空,我如何使用分组依据并忽略?

python - 链式重载比较运算符

python - 如何修复此属性错误 : 'SubRequest' object has no attribute 'getfuncargvalue' ?

sql - 如何通过单个查询对从另一个表检索的表列表进行 UNION?

postgresql - 如何通过终端在psql中保存查询

postgresql - psql 提示符更改为 "-#"并且该语句未提交

sequelize.js - 带有 Sequelize 的副本读取数据库的竞争条件

Python - 在没有 .replace() 的情况下替换多个字符