由于插入命令中的单引号而导致 psycopg2 语法错误

eag*_*arn 6 python psycopg2

我正在尝试使用 psycopg2 执行“插入表”命令。我在函数中创建命令字符串,该函数返回以下形式的字符串:

create table %s (  %s %s , %s %s , %s %s , %s %s , %s %s , %s %s , %s %s , %s %s , %s %s , %s %s , %s %s , primary key %s );
Run Code Online (Sandbox Code Playgroud)

该函数还返回一个字符串变量元组,我想用它来填充格式字符串:

('games', 'score_loser', 'integer', 'playoffs', 'boolean', 'record_loser', 'integer[]', 'broadcast', 'varchar(20)', 'date', 'date', 'id', 'varchar (30)', 'home_team', 'varchar (50)', 'record_winner', 'integer[]', 'winner', 'varchar (50)', 'loser', 'varchar (50)', 'score_winner', 'integer', 'id')
Run Code Online (Sandbox Code Playgroud)

但是当我尝试执行该命令时,我遇到了一个问题,即元组中的变量被放入单引号中,这会导致 psycopg2 中出现语法错误:

psycopg2.ProgrammingError: syntax error at or near "'games'"
Run Code Online (Sandbox Code Playgroud)

第 1 行:创建表 'games' ( 'score_loser' 'integer' , 'playoffs'...

有人可以告诉我应该做什么吗?

0 0*_*0 0 7

你不能那样做。来自有关查询参数的 Psycopg 文档

\n\n
\n

仅应通过此方法绑定查询值:不应使用\xe2\x80\x99 将表或字段名称合并到查询(Psycopg 将尝试将表名称引用为字符串值,从而生成无效的 SQL)。如果您需要动态生成 SQL 查询(例如动态选择表名),您可以使用 psycopg2.sql 模块提供的设施:

\n
\n\n
>>> cur.execute("INSERT INTO %s VALUES (%s)", (\'numbers\', 10))  # WRONG\n>>> cur.execute(                                                # correct\n...     SQL("INSERT INTO {} VALUES (%s)").format(Identifier(\'numbers\')),\n...     (10,))\n
Run Code Online (Sandbox Code Playgroud)\n