Каков наиболее эффективный способ вставки словарей/списков Python в базу данных SQL?

Представьте, что у вас есть ключ -значение словаря 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?

10
задан Daniel Šintaj 4 August 2012 в 09:50
поделиться