0

我正在做一个 SQL 接口,我遇到了字符串格式的问题。我想做的是一条SQLINSERT INTO table_name语句。当我现在使用参数化插入时,我会在表名周围得到不需要的引号。这是代码:

    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';

如您所见,书籍周围有引号,导致语法错误。

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

4

1 回答 1

0

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

您必须首先格式化 SQL 语句:

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

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

于 2015-09-26T16:50:11.680 回答