You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Psycopg2创建表遇SyntaxError:user字段语法错误求助

问题解决:psycopg2语法错误(syntax error at or near "user")

问题原因

user是PostgreSQL的保留关键字,直接将它作为表字段名使用时,会触发SQL语法解析错误。

解决方案

有两种可行的处理方式:

方式1:修改字段名为非保留字

把字段名user改成username、player_name这类普通名称,示例代码修改如下:

def savescore():
    global highscore
    global PlayerEntry
    Nume="score"#numele tabelului
    # 修改字段名为username
    create=f"CREATE TABLE IF NOT EXISTS {Nume} (username VARCHAR(255),highscore VARCHAR(255))"
    cur.execute(create)#am creat tabelul 

    # 插入语句同步修改字段名
    scriptadd= "INSERT INTO "+Nume+" (username,highscore) VALUES(%s,%s)"

    tupple=(PlayerEntry,highscore)

    cur.execute(scriptadd,tupple)#trimite informatiile la server ca sa execute scriptul

    connectiondb.commit()

方式2:用双引号包裹保留字(仅需保留原字段名时使用)

如果必须保留user作为字段名,需要用双引号将其包裹,PostgreSQL会将其视为普通标识符。注意在Python字符串中,可通过单引号包裹整段SQL来避免转义:

def savescore():
    global highscore
    global PlayerEntry
    Nume="score"#numele tabelului
    # 用双引号包裹user字段
    create=f'CREATE TABLE IF NOT EXISTS {Nume} ("user" VARCHAR(255),highscore VARCHAR(255))'
    cur.execute(create)#am creat tabelul 

    # 插入语句同样用双引号包裹user字段
    scriptadd= 'INSERT INTO '+Nume+' ("user",highscore) VALUES(%s,%s)'

    tupple=(PlayerEntry,highscore)

    cur.execute(scriptadd,tupple)#trimite informatiile la server ca sa execute scriptul

    connectiondb.commit()

内容的提问来源于stack exchange,提问作者P0larr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:40:48