10

大量のアイテムを含むキーと値の 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);

(まあ、5 つの値で問題ありませんが、たとえば 500 の値があると想像してください。)

効果的で短い文字列のSQL挿入のためのPythonクラス/メソッドはありますか? 私はこのコードを書きました:

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),)

何千もの値が存在する可能性がありますが、この 1 つの挿入ステートメントで問題ありません。

Unicode 文字列をデコードする条件に注意してください。したがって、各値の前に「u」文字はありません。

それで、短い INSERT 文字列を使用した同じ単純なアプローチで多くの値を挿入する方法として、より効果的で準備されたクラスまたはメソッドはありますか?

4

1 に答える 1

5

データがそのように構造化されている場合、ドキュメント指向のデータベース (Mongo/Couch など...) に適しています。

reprこのようなもので逃げることができます...使用するのは少し賢すぎると思います...

insert_sql = 'INSERT INTO conditions_bratislava(%s) values(%s)'
cols = ', '.join(somedict)
vals = ', '.join('?' * len(somedict)) # or whatever qparam is required
to_execute = insert_sql % (cols, vals)
some_cursor.execute(to_execute, somedict.values())

余談ですが:

value_type = type(value)
if value_type is unicode:

次のように記述します。

if isinstance(value, unicode):
于 2012-08-04T10:43:23.253 に答える