Как использовать запрос SELECT со многими переменными в psycopg2 - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь запросить мою таблицу PostgreSQL с помощью psycopg2. Мне нужно использовать 3 переменные в запросе, потому что они будут меняться от исполнения к исполнению. Вот код, который я использовал:

def select_from_table(values, dbname, host, user, password, month,cluster,date):
    try:
        tup = open_connection_to_db(dbname, host, user, password)
        sql_command = """SELECT listing_id, price_x FROM test WHERE month = %s AND cluster = %s AND date = %s;"""
        tup[1].execute(sql_command, (month,cluster,date,))
        tup[0].commit()
        print("Selecting rows from mobile table using cursor.fetchall")   
        df = pd.read_sql(sql_command, tup[0])
        return df
    except (Exception, psycopg2.Error) as error:
        print("Error while fetching data from PostgreSQL", error)
    finally:
        tup[0].close()
        tup[1].close()
        print("PostgreSQL connection is closed")

Вы можете предположить, что функция open_connection_to_db работает (я использовал ее до сих пор) и возвращает 2 переменные: tup [0] = connection tup [1] = курсор

Я получаю эту ошибку:

Error while fetching data from PostgreSQL Execution failed on sql 'SELECT listing_id, price_x FROM test WHERE month = %s AND cluster = %s AND date = %s': syntax error at or near "%"
LINE 1: ...ELECT listing_id, price_x FROM test WHERE month = %s AND clu...
                                                             ^

1 Ответ

0 голосов
/ 11 апреля 2020

Вам нужно передать отформатированную строку для выполнения функции ie вам нужно что-то вроде этого

sql_command = """SELECT listing_id, price_x FROM test 
WHERE month = %s AND cluster = %s AND date = %s;""" % (month,cluster,date)
tup[1].execute(sql_command)
...