2016-02-11 1 views
1

У меня есть следующая функция, которая извлекает данные из таблицы, но я хочу, чтобы передать имя таблицы в качестве параметра функции ...Как использовать переданный параметр как таблицу Name в Select query python?

def extract_data(table): 
    try: 
     tableName = table 
     conn_string = "host='localhost' dbname='Aspentiment' user='postgres' password='pwd'" 
     conn=psycopg2.connect(conn_string) 
     cursor = conn.cursor()  
     cursor.execute("SELECT aspects_name, sentiments FROM ('%s') " %(tableName)) 
     rows = cursor.fetchall() 
     return rows 
    finally: 
     if conn: 
      conn.close() 

, когда я называю функцию extract_data (Harpar): Harpar этого имени таблицы но он дает ошибку, что «Harpar» не определен .. какой-нибудь hepl?

ответ

1

Update: По psycopg2 версии 2.7:

Теперь вы можете использовать модуль SQL в psycopg2 составить динамические запросы такого типа:

from psycopg2 import sql 
query = sql.SQL("SELECT aspects_name, sentiments FROM {}").format(sql.Identifier(tableName)) 
cursor.execute(query) 

Pre < 2,7:

Используйте адаптер AsIs по этим линиям:

from psycopg2.extensions import AsIs 
cursor.execute("SELECT aspects_name, sentiments FROM %s;",(AsIs(tableName),)) 

Без адаптера AsIs psycopg2 избежит имени таблицы в вашем запросе.

+1

'AsIs' не должен использоваться для этой цели, вместо этого следует использовать новый' sql' -модуль: http://stackoverflow.com/a/42980069/5285608 –

+1

@ AntoineDusséaux: Согласен. Новый модуль sql обеспечивает гораздо более чистый метод составления динамических запросов. Я обновил старый ответ соответственно. – Noyer282

Смежные вопросы