2015-09-26 23 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的。