我正在尝试映射一个看起来像这样的对象:
self.user = {lots of stuff in here}
self.timeStamp = i am a date object
self.coordinates = {lots of stuff in here}
self.tweet = {lots of stuff in here}
self.favourite = 0
self.reTweet = 0
非字典似乎很容易映射
__tablename__ = 'Tweet'
id = Column(Integer, primary_key=True)
timeStamp = Column(DateTime)
favourite = Column(Integer)
reTweet = Column(Integer)
但是我不知道如何映射字典对象。理想情况下,这些对象应该自行进入自己的表格,以便我们遵守第3范式。但是我不知道从哪里开始。有人能指出我正确的方向吗?我应该将这些词典转换成自己的对象并映射它们吗?
非常感谢答案 0 :(得分:3)
用户和坐标条目可以存储为单独的表,推文表将链接到外键。类似的东西:
class Tweet(Base):
__tablename__ = 'tweet'
id = Column(Integer, Sequence('tweet_id_seq'), primary_key=True)
user = Column(Integer, ForeignKey('user.id'))
coords = Column(Integer, ForeignKey('coordinates.id'))
timeStamp = Column(DateTime)
favourite = Column(Integer)
reTweet = Column(Integer)
class Coordinates(Base):
__tablename__ = 'coordinates'
id = Column(Integer, Sequence('coordinates_id_seq'), primary_key=True)
lat = ...
long = ...
class User(Base):
__tablename__ = 'user'
id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
name = ...
答案 1 :(得分:2)
要存储字典对象,您有以下几种选择:
json.dumps(value)
将字词写入其中,然后使用json.loads(db_value)
创建自己的json type,就像在此帖子中提到的那样:SQLAlchemy JSON as blob/text
import jsonpickle
import sqlalchemy.types as types
class JsonType(types.MutableType, types.TypeDecorator):
impl = types.Unicode
def process_bind_param(self, value, engine):
return unicode(jsonpickle.encode(value))
def process_result_value(self, value, engine):
if value:
return jsonpickle.decode(value)
else:
# default can also be a list
return {}
而且,仅供参考,你很难遵循第三范式,因为推文对象没有严格定义的模式 - 将它存储在数据库字段中就可以了。
顺便说一句,我发现使用mongodb来存储推文非常方便,因为它是无模式的并且存储了json对象。
希望有所帮助。