gpt4 book ai didi

python使用sqlalchemy将列表存储到sql数据库中

转载 作者:太空宇宙 更新时间:2023-11-03 12:34:11 25 4
gpt4 key购买 nike

简单的代码是这样的:

    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 来存储我的对象,我想知道在哪里改变以达到我的目标......

最佳答案

要将列表存储在数据库中,您可以使用新表:

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 .

不要使用 str()/eval() 如果你想将 chinese 存储为一个 blob 你可以使用 json.dumps()/json.loads()。使用 @thebjorn 建议类型装饰器:

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 .

关于python使用sqlalchemy将列表存储到sql数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11914666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com