2016-03-10 2 views
0

Мой SQL-запрос выглядит следующим образом:Postgres вставки ошибок синтаксиса

product = 'Huggies Little Movers Diaper Pants for Boys Size 5 (60 Count)' 
retailer = 'Target' 
query = """SELECT * FROM product_info WHERE product_name = %s AND retailer = %s""" % (product, retailer) 

conn = psycopg2.connect("dbname='test1' user='postgres' host='localhost' password='123'") 
cur = conn.cursor(cursor_factory = psycopg2.extras.RealDictCursor) 
cur.execute(query) 

Когда я исполняю, что я получаю сообщение об ошибке сказав:

psycopg2.ProgrammingError: syntax error at or near "Basic" 

Я не знаю, почему мой синтаксис является неправильным

ответ

2

Ваше заявление;

query = """SELECT * FROM product_info WHERE product_name = %s AND retailer = %s""" % (product, retailer) 

... строит полную строку из запроса и параметров без каких-либо процитировать вокруг ваших строк, что делает всю строку недопустимое SQL, который терпит неудачу в выполнить;

SELECT * FROM product_info 
WHERE product_name = Huggies Little Movers Diaper Pants for Boys Size 5 (60 Count) 
    AND retailer = Target 

Что вы, вероятно, пытается сделать это параметризуя ваш запрос, который вместо того, чтобы сделать в выполнить путем передачи параметров в кортеже;

query = """SELECT * FROM product_info WHERE product_name = %s AND retailer = %s""" 
... 
cur.execute(query, (product, retailer))