У меня есть строка данных в формате dict. Есть ли простой способ вставить его в таблицу mysql. Я знаю, что я могу написать пользовательскую функцию для преобразования dict в пользовательский sql-запрос, но я ищу более прямую альтернативу.MySQLdb вставка dict в таблицу
ответ
MySQLDB не поставляется с чем-либо, что допускает такую прямую работу. Это обычная проблема с множеством ответов, включая пользовательскую функцию для этой цели.
По моему опыту, лучше всего прятаться и просто писать параметризованный SQL большую часть времени. Если у вас есть то же самое, что происходит много, я бы подумал о факторизации его в функцию полезности.
ОДНАКО, если вы вручную ставите SQL-код с использованием параметров, тогда по большей части заботятся о безопасности и проблемах. Когда вы начинаете основывать свой SQL на словаре данных, которые пришли откуда (?), Вам нужно быть гораздо более осторожным.
Таким образом, ваш код, скорее всего, будет более читабельным и удобным и безопасным, если вы просто напишете запросы, используйте параметры и документы.
(Примечание: некоторые сторонники ОРМ, и т.д ... может не согласиться ... это мнение, основанное на большой опыт на то, что был простым, надежным и работал в нашей команде)
Ну ... В соответствии с документацией для 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: Да, попробовал. Оно работает.