Ошибка программирования psycopg2 при использовании.format()

Я не уверен, что именно здесь происходит, но это может иметь какое-то отношение к формату в python. Запуск этого вызывает ошибку.

x = '00000201000012EB'
sql = """ SELECT * FROM table WHERE id = {} """.format(x)
conn.execute(sql)

Я получаю сообщение об ошибке: синтаксическая ошибка рядом с "EB"

Однако, когда я запускаю команду, как это:

sql = """ SELECT * FROM table WHERE id = '00000201000012EB' """
conn.execute(sql)

Работает нормально.

Что-то не так с тем, как я форматирую этот SQL-оператор?

2 ответа

Решение

Используйте переменную в качестве аргумента для execute():

cur.execute(""" SELECT * FROM my_table WHERE id = %s """, (x,))

Если вы решили использовать format(), вы должны добавить одинарные кавычки вокруг заполнителя:

sql = """ SELECT * FROM my_table WHERE id = '{}' """.format(x)

Верьте этому или нет, это было исправлено, добавляя больше кавычек в строку.

это наконец сработало.

x = '00000201000012EB'
sql = """ SELECT * FROM table WHERE id = {} """.format("'" + x + "'")

Поскольку для оператора sql требовался другой набор кавычек, я просто добавил их, чтобы убедиться, что он обрабатывается как собственная строка.

Другие вопросы по тегам