У меня есть многострочная строка (большой запрос mysql), и я хочу отформатировать ее с помощью словаря (данных) следующим образом:
query = """
INSERT LOW_PRIORITY INTO goods(id, type, volume, strength,
country, price, description, year, image, url, class, color,
grape, vintage, dryness, shop, added)
VALUES (
'%(id)s',
'%(type)s',
'%(volume)s',
%(strength)d,
'%(country)s',
%(price)d,
'%(description)s',
'%(year)s',
'%(image)s',
'%(url)s',
'%(class)s',
'%(color)s',
'%(grape)s',
%(vintage)d,
'%(dryness)s',
'%(shop)s',
'%(added)s'
) ON DUPLICATE KEY UPDATE
type = '%(type)s',
volume = '%(volume)s',
strength = %(strength)d,
country = '%(country)s',
price = %(price)d,
description = '%(description)s',
year = '%(year)s',
image = '%(image)s',
url = '%(url)s',
class = '%(class)s',
color = '%(color)s',
grape = '%(grape)s',
vintage = %(vintage)d,
dryness = '%(dryness)s',
shop = '%(shop)s',
added = '%(added)s""" % data
Когда я пытаюсь это сделать, я не получаю никаких ошибок, но моя строка исчезает. Есть ли способ решить эту задачу?
ОБНОВЛЕНИЕ: я обнаружил проблему. Я пытался отформатировать строку ascii со значениями unicode моего словаря. Я не видел трассировку из-за блока try/except, из которого был вызван мой метод с выполнением запроса. Мораль этой истории такова: всегда проверяйте кодировку строк в Python 2.x
MySQLdb
поддерживает PEP 249, который указывает:cursor.execute(operation, parameters)
. - person beerbajay   schedule 10.02.2012c.execute("INSERT INTO breakfast (name, spam, eggs, sausage, price) VALUES (%s, %s, %s, %s, %s)", ["Spam and Sausage Lover's Plate", 5, 1, 8, 7.95])
- person beerbajay   schedule 10.02.2012.format()
. - person 2rs2ts   schedule 31.01.2014