Представьте, что у вас есть ключ -значение словаря Python (или список )с большим количеством элементов. Допустим, вы читаете JSON-файл большего размера и хотите сохранить его содержимое в таблицу MySQL с ключами в качестве имен столбцов и значениями в качестве самих значений.
Пример JSON:
"display_location": {
"city":"Bratislava",
"state_name":"Slovakia",
"country_iso3166":"SK",
"latitude":"48.20000076",
"longitude":"17.20000076",
}
Тогда совершенно неэффективно писать подобную SQL-вставку вручную:
INSERT INTO TABLE (city, state_name, country_iso3166, latitude, longitude) VALUES('%s','%s','%s','%s','%s')
% (Bratislava, Slovakia, SK, 48.20000076, 17.20000076);
(Ну, с пятью значениями все в порядке, но представьте, например, что их пять сотен.)
Есть ли какой-либо класс/метод Python для эффективной и короткой -строковой вставки SQL? Я написал этот кусок кода:
for key,value in list.iteritems():
value_type = type(value)
if value_type is unicode:
vars_to_sql.append(value.encode('ascii', 'ignore'))
keys_to_sql.append(key.encode('ascii', 'ignore'))
else:
vars_to_sql.append(value)
keys_to_sql.append(key)
keys_to_sql = ', '.join(keys_to_sql)
После этого вставка выглядит намного проще:
INSERT INTO conditions_bratislava(%s) VALUES %r" % (keys_to_sql, tuple(vars_to_sql),)
Могут быть тысячи значений, и вы все равно будете в порядке с этим одним оператором вставки.
Обратите внимание на это условие, которое будет декодировать строки Unicode, поэтому у вас не будет букв «u» перед каждым значением.
Итак, есть ли более эффективный и подготовленный класс или метод, как вставить много значений одним и тем же простым подходом с короткой строкой INSERT?