要存储列表中一个数据库,你可以使用一个新表:
class Word(Base):
__tablename__ = "words"
id = Column(Integer, primary_key=True)
eng = Column(String(32), unique=True)
chinese = relationship("Chinese", backref="eng")
def __init__(self, eng, chinese):
self.eng = eng
self.chinese = map(Chinese, chinese)
class Chinese(Base):
__tablename__ = "chinese_words"
word = Column(String(128), primary_key=True)
eng_id = Column(Integer, ForeignKey('words.id'), primary_key=True)
def __init__(self, word):
self.word = word
见full example。
,如果你想存储chinese
,你可以使用json.dumps()
/json.loads()
一个blob不要使用str()
/eval()
。使用建议的@thebjornTypeDecorator
:
class Json(TypeDecorator):
impl = String
def process_bind_param(self, value, dialect):
return json.dumps(value)
def process_result_value(self, value, dialect):
return json.loads(value)
class Word(Base):
__tablename__ = "words"
eng = Column(String(32), primary_key=True)
chinese = Column(Json(128))
见full example。
来源
2012-08-11 14:30:48
jfs
这与实际问题的非常好的答案无关,只是在'Word.eng'上具有'unique = True'的评论将阻止您为同形异义词存储不同的翻译(例如'live' - 韵'give'和'live' - 与'dive'押韵)。当语言A中的两个单独的概念映射到语言B中的单一概念时,例如,德语essen/fressen - >吃(取决于主题),法语知识/connaître - >知道(取决于对象),英语屋顶/天花板 - > tak [挪威语](取决于...)等。自然语言翻译很难;-) – thebjorn 2013-09-08 10:22:03
@thebjorn:'单词。在这个问题中,“eng”是隐含唯一性的主要关键。不管它,我已经使用[**一对多关系](http://docs.sqlalchemy.org/en/latest/orm/relationships.html#one-to-many)而不是[** many许多**](http://docs.sqlalchemy.org/en/latest/orm/relationships.html#many-to-many)(你所描述的),以避免复杂的演示如何存储在数据库中列表。 Sqlalchemy支持它,如果你需要它。 – jfs 2013-09-08 15:51:07