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
相关产品推荐
相关产品推荐

