2011-12-29 4 views
2

У меня есть строка данных в формате dict. Есть ли простой способ вставить его в таблицу mysql. Я знаю, что я могу написать пользовательскую функцию для преобразования dict в пользовательский sql-запрос, но я ищу более прямую альтернативу.MySQLdb вставка dict в таблицу

ответ

2

MySQLDB не поставляется с чем-либо, что допускает такую ​​прямую работу. Это обычная проблема с множеством ответов, включая пользовательскую функцию для этой цели.

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

ОДНАКО, если вы вручную ставите SQL-код с использованием параметров, тогда по большей части заботятся о безопасности и проблемах. Когда вы начинаете основывать свой SQL на словаре данных, которые пришли откуда (?), Вам нужно быть гораздо более осторожным.

Таким образом, ваш код, скорее всего, будет более читабельным и удобным и безопасным, если вы просто напишете запросы, используйте параметры и документы.

(Примечание: некоторые сторонники ОРМ, и т.д ... может не согласиться ... это мнение, основанное на большой опыт на то, что был простым, надежным и работал в нашей команде)

4

Ну ... В соответствии с документацией для paramstyle:

Установить в формате '= ANSI C в формате printf, например '... WHERE name =% s'. Если для conn.execute() используется объект сопоставления, тогда интерфейс фактически использует коды «pyformat» = расширенный формат Python, например. '... WHERE name =% (name) s'. Однако API в настоящее время не позволяют спецификацию более одного стиля в paramstyle

Таким образом, это должно быть только вопрос:

curs.execute("INSERT INTO foo (col1, col2, ...) VALUES (%(key1)s, %(key2)s, ...)", dictionary)

где key1, key2 и т.д. будут ключи от словаря.

Отказ от ответственности: Я не пробовал это сам :)

Edit: Да, попробовал. Оно работает.