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

时间:2019-04-06 15:13:57

标签: 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 );

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

('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')

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

psycopg2.ProgrammingError: syntax error at or near "'games'"

第1行:创建表格“游戏”(“ score_loser”“整数”,“季后赛” ...

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

1 个答案:

答案 0 :(得分:3)

您不能那样做。来自Psycopg documentation on query parameters

  

仅查询值应通过此方法进行绑定:不应将其用于将表名或字段名合并到查询中(Psycopg会尝试将表名引用为字符串值,从而生成无效的SQL)。如果需要动态生成SQL查询(例如,动态选择表名),则可以使用psycopg2.sql模块提供的功能:

>>> cur.execute("INSERT INTO %s VALUES (%s)", ('numbers', 10))  # WRONG
>>> cur.execute(                                                # correct
...     SQL("INSERT INTO {} VALUES (%s)").format(Identifier('numbers')),
...     (10,))