简短的代码是这样的:
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()
Run Code Online (Sandbox Code Playgroud)
我正在尝试将word.chinese存储为字符串.在python中它是一个列表...好吧,当我自己编写sql时,我可以str(word.chinese)然后插入到数据库中.当需要得到它时,我可以简单地使用eval(result)来获取原始的python对象.但由于我使用sqlalchemy存储我的物体,我想知道在哪里改变以达到我的目标......
要在db中存储列表,您可以使用新表:
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
Run Code Online (Sandbox Code Playgroud)
查看完整示例.
不要使用str()/ eval()如果你想存储chinese为blob你可以使用json.dumps()/ json.loads().使用@thebjorn 建议TypeDecorator:
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))
Run Code Online (Sandbox Code Playgroud)
查看完整示例.
| 归档时间: |
|
| 查看次数: |
9228 次 |
| 最近记录: |