简短的代码如下:
class Word(Base):
__tablename__ = 'word'
eng = Column(String(32),primary_key=True)
chinese = Column(String(128))
word = Word(eng='art',chinese=[u'艺术',u'美术'])
session.add(word)
session.commit()
我试着把word.chinese存储为字符串。在python中是一个列表。。。 好吧,当我自己编写sql时,我可以str(word.chinese)然后插入数据库。 当需要获取它时,我可以简单地eval(result)来获取原始的python对象。 但是由于我使用sqlalchemy来存储对象,我想知道在哪里可以更改以达到我的目标。。。
你会在
TypeDecorator
(http://docs.sqlalchemy.org/en/rel_0_7/core/types.html#sqlalchemy.types.TypeDecorator)中找到你想要的功能——你需要创建一个list的子类来让它工作。但是,你要做的是存储两个不同的英语单词艺术翻译(至少google translate告诉我的是:-)。在文本字段中将它们存储为逗号分隔的列表并不是第一种正常形式。你应该存两张唱片
并更改数据库结构以允许此操作。
问题是串列表并没有如你所期望的那样工作(我的结论来自你的文章)。您可以将中文单词存储在数据库中,只需将
str(word.chinese)
改为u''.join(word.chinese)
,并将值作为字符串存储在数据库中。要在数据库中存储列表,可以使用新表:
见full example。
不要使用
str()
/eval()
如果您想将chinese
存储为blob,您可以使用json.dumps()
/json.loads()
。使用由@thebjornTypeDecorator
建议的:见full example。
相关问题 更多 >
编程相关推荐