2016/11/12
将 SQLAlchemy 对象, 转化为Python-dict, 或者序列化成 JSON, 主要实现:
to_dict()
to_json()
我自己实现了一种做法, 但是总感觉还有些问题( 但是又说不清楚 ), 大家有什么比较好的办法?
将这两个方法直接绑定到Base上面, 则继承Base的类, 都能使用
def _gen_tuple(self):
def convert_datetime(value):
if value:
return value.strftime("%Y-%m-%d %H:%M:%S")
else:
return ""
for col in self.__table__.columns:
if isinstance(col.type, DateTime):
value = convert_datetime(getattr(self, col.name))
elif isinstance(col.type, Numeric):
value = float(getattr(self, col.name))
else:
value = getattr(self, col.name)
yield (col.name, value)
def to_dict(self):
return dict(self._gen_tuple())
def to_json(self):
return json.dumps(self.to_dict())
Base._gen_tuple = _gen_tuple
Base.to_dict = to_dict
Base.to_json = to_json
Terima kasih atas jemputan
Saya boleh faham apa yang anda ingin sirikan, saya rasa anda ingin mencapai kesan berikut:
Saya telah mengikuti kaedah sedemikian sebelum ini, tetapi secara langsung menukar medan dalam objek menjadi
json
bermakna banyak medan yang tidak diperlukan oleh bahagian hadapan juga akan dikembalikan bersama. Secara peribadi, saya tidak begitu menyukainya, saya cenderung untuk memberikan bahagian hadapan apa sahaja yang diperlukan. Jadi operasito_json
yang mudah seperti itu tidak begitu baik, melainkan anda menggabungkan beberapa pemalam bersiri, yang boleh mengawal dengan baik apa yang perlu dikembalikan ke bahagian hadapan Namun, selepas melihat sekeliling pemalam tersebut, tiada siapa yang sangat mudah digunakan. Sebaliknya, ia adalah lebih fleksibel untuk memasangnya sendiri, jadi secara beransur-ansur saya tidak lagi mengikuti kaedah sedemikian. Jika anda lebih suka ini, anda boleh menyemak pemalamdjango-rest-framework
Siri di dalamnya mungkin yang anda mahukan. Sebagai tambahan kepada SQLAlchemy ORM, terdapat Orator ORM, yang secara peribadi saya rasa cukup bagus.Jadi, secara ringkasnya, tiada syor yang baik Sudah tentu, anda boleh melaksanakannya sendiri, dan itu sahaja.
Mengapa tidak menggunakan jeruk? Atau adakah kerana ia mesti disiri ke dalam JSON?
mongodb + mongokit sepatutnya lebih mengikut citarasa anda