Python psycopg2语法错误位于或接近;更新;

Python psycopg2语法错误位于或接近;更新;,python,postgresql,sql-update,psycopg2,Python,Postgresql,Sql Update,Psycopg2,我读过一些关于“语法错误在或接近”的问答,但没有一个能解决我的问题 错误示例: Traceback (most recent call last): File "<stdin>", line 1, in <module> psycopg2.ProgrammingError: syntax error at or near "UPDATE" LINE 1: DECLARE "teste" CURSOR WITHOUT HOLD FOR UPDATE applicant

我读过一些关于“语法错误在或接近”的问答,但没有一个能解决我的问题

错误示例:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
psycopg2.ProgrammingError: syntax error at or near "UPDATE"
LINE 1: DECLARE "teste" CURSOR WITHOUT HOLD FOR UPDATE applicant SET...
                                                ^
我的代码基本上是:

def _connect_database():
    return psy.connect(
        dbname=settings.DATABASE['DBNAME'],
        host=settings.DATABASE['HOST'],
        port=settings.DATABASE['PORT'],
        user=settings.DATABASE['USER'],
        password=settings.DATABASE['PASSWORD'],
        application_name=settings.env
    )

# Connects to database
conn = _connect_database()
# Creats a named cursor
cur = conn.cursor('test')

# Execute
cur.execute(update_script, ('{"json": "test"}', '00025ba0-748f-11e8-b0d3-d7108dd3af23'))
我已经在execute方法和参数上显式编写了脚本,但仍然得到相同的错误:

cur.execute("UPDATE applicant SET cv_recrutai_entities = 'json here' WHERE id = '00025ba0-748f-11e8-b0d3-d7108dd3af23'")
注意,我甚至删除了第一个参数('json here')的双引号

我错过什么了吗

cur = conn.cursor('test')
您正在尝试打开服务器端游标

游标(名称=无,游标\工厂=无,可滚动=无,保留=假)

使用连接返回一个新的游标对象

如果指定了name,则返回的游标将是服务器端游标(也称为命名游标)。否则它将是一个常规的客户端游标

仅使用

cur = conn.cursor()
服务器端(命名)游标只能用于选择或值查询。他们实施

质疑

一个SELECT或VALUES命令,提供光标返回的行

使用命名游标,结果数据将在服务器上收集,并在需要时(获取)发送(可能部分发送)到客户端。数据仅在打开光标的事务期间存储,因此
commit
rollback
会将其释放

客户端(未命名)游标允许执行任何有效的SQL查询。可能的结果集在执行查询后立即发送到客户端


可以使用单个连接使用命名和未命名游标,但如果要同时执行此操作,则应使用两个单独的连接。

为什么要使用游标进行更新?对游标的查询应为。我不知道psycopg,但它通常不是
conn.execute(一些sql更新)
psycopg2
(在其文档中)甚至使用光标来执行基本的选择查询。命名游标(服务器端)主要是为了减少select查询所需的RAM量,此外,我还考虑使用它来组织游标。因此,当您命名时,我们有“真实”的服务器端游标,而当您不命名时,我们有“虚假”的客户端游标?希望@klin会回来,把我的部分评论合并到他们的答案中,界面的这部分看起来确实有点混乱。这就是我所理解的。请随时更新答案!为什么我不能使用服务器端游标进行更新查询?它确实可以工作,但我不能同时使用常规客户端游标命名游标(我使用的是多处理)服务器端游标只能用于
SELECT
value
查询(请参阅@muistooshort的注释)。我认为您应该使用两个连接来同时运行客户端和服务器端游标。如果您在回答中添加最后一条评论,那就太好了。谢谢你的帮助
cur = conn.cursor()