2015-09-26 88 views
0

我正在做一个SQL接口,并且我遇到了字符串格式问题。我想要做的是SQL INSERT INTO table_name声明。当我现在做,使用参数化的instertion,我收到我的表名不需要的引号。这是代码:如何不能有pgdb加引号

query = "INSERT INTO %(table)s VALUES %(vals)s;" 

    self.cur.execute(query, params) 

什么情况是这样的:

ERROR: syntax error at or near "'books'" 
LINE 1: INSERT INTO 'books' VALUES 'hej, hej, hej, hej'; 

正如你可以看到,周围有书引号,导致一个语法错误。

我试图找到这方面的信息,但没有运气。我怎样才能解决这个问题?

回答

0

不能将执行参数用作表名或列名。它们只允许使用数值。

你必须先格式化的SQL语句:

query = "INSERT INTO {} VALUES ({})".format(table_name, ','.join(['%s']*number_of_columns)) 
self.cur.execute(query, params) 

或者更好,使用包,已经提供了一些数据库抽象,像SQLAlchemy的。