要存儲列表中一個數據庫,你可以使用一個新表:
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