UTALI

書き溜めておいた技術記事や旅行記のバックアップです。

Pythonでタプルや集合をデータベースに保存する

あまりスマートなやり方ではないかもしれませんが、データベースにタプルや集合などの構造化されたデータを保存したいときは一回文字列に変換すると上手くいきます。

MongoDBではJSON形式(BSON)でデータを格納するのでタプルや集合などのPython組み込みのリテラルをそのまま格納することができません。この場合も文字列化して利用するといいでしょう。

データベースに保存するとき

文字列に変換して保存する。

例:

u = [(1,5),(5,4),(6,5)]

_u = str(u)
print(u)

結果

[(1, 5), (5, 4), (6, 5)]

この文字列をデータベースに保存する

例:Pymongoを利用する場合

import pymongo

client = pymongo.MongoClient("mongodb://localhost:27017")

collection = client.table
db = collection.items

u = [(1,5),(5,4),(6,5)]

_u = str(u)

_item = db.insert_one({"value":_u})

print(_item.inserted_id)



うまくいきました

データを取り出す(文字列をリテラルに変換する)

astモジュールのliteral_evalを利用する

先ほど保存した文字列化したタプルのリストを再変換してみよう。

from ast import literal_eval
import pymongo

client = pymongo.MongoClient("mongodb://localhost:27017")

collection = client.table
db = collection.items

_items = db.find()
for _item in _items:
  _value = literal_eval(_item["value"])

  print(_value[0])
  print(_value[1])

結果

(1,5)
(5,4)

うまくいきました。