4

dateutil.rruleオブジェクトをデータベースに保存し、データベースから読み取った後でそれらを再作成したいと思います。

次の問題を考えると、回避策を使用する必要があると思います。 Python dateutilsは、iCalendar形式に従って繰り返しルールを出力します(RFC 5545を参照)

myrruleの出力を保存することを考えています。データベースに文字列としてdictし、必要に応じてrruleオブジェクトを再作成します。

dictは次のようになります。

{'_cache_complete': False, '_byhour': (0,), '_wkst': 0,
'_timeset': (datetime.time(0, 10),), '_bysecond': (0,),
'_bymonthday': (), '_byweekno': None, '_bysetpos': None,
'_cache': None, '_bymonth': None, '_bynweekday': ((4, 3),),
'_tzinfo': None, '_byyearday': None, '_byweekday': None,
'_byminute': (10,), '_len': 10, '_until': None,
'_bynmonthday': (), '_dtstart': datetime.datetime(2012, 10, 13, 0, 10),
'_count': 10, '_freq': 1, '_interval': 1, '_byeaster': None}

それは良い考えですか?他に何か提案はありますか?

辞書からPythonオブジェクトを復元するにはどうすればよいですか?python setattr()は私の最善の策ですか、それとももっと簡単なものがありますか?

代わりにこのようなものを使用することを検討する必要がありますか? https://stackoverflow.com/a/1305663/161628

4

1 に答える 1

2

必要なのはPythonのpickleモジュールです。このpickleモジュールは、任意のPythonオブジェクトを文字列に変換できる単純なシリアル化モジュールです。文字列は、後で逆シリアル化して元のオブジェクトに戻すことができます。

import pickle
serial_str = pickle.dumps(your_rrule_object)
db.store(serial_str)
...
serial_str = db.retrieve()
new_rrule_object = pickle.loads(serial_str)

詳細については、pickleモジュールのドキュメントを確認してください。

于 2012-10-13T08:21:49.157 に答える