如何将记录从一张表转移到另一张表?

我有以下示例表:


class DestDB(Base):

    __tablename__ = "dest_db"

    __table_args__ = (Index('nameplace', "name", "place"))


    id = Column(Integer, primary_key=True)

    name = Column(String(100))

    place = Column(String(100))

我很习惯使用字典来添加记录。例如:


dict = {"name": "foo", "place": "bar"}

session.add(DestDB(**dict))

但是,如何将记录从一张表转移到另一张表?我想我可以查询源表,遍历每条记录,将其转换成字典,然后添加上面的结果。但是,我确定必须有一个更简洁的解决方案?


源数据库中会有重复的name和place记录组合,所以我不想使用任何类型的批量操作,除非它不会插入任何重复记录。


假设源数据库如下所示:


class SourceDB(Base):

    __tablename__ = "source_db"


    id = Column(Integer, primary_key=True)

    name = Column(String(100))

    place = Column(String(100))

我只想传输name和place字段。


回首忆惘然
浏览 119回答 1
1回答

智慧大石

我建议坚持使用The Zen of Python。显式优于隐式。我会在 ‍ 上实现一个方法SourceDB来提供我想要的对象的字典格式。class SourceDB(Base):    __tablename__ = "source_db"    id = Column(Integer, primary_key=True)    name = Column(String(100))    place = Column(String(100))    def as_dict(self):        return dict(name=self.name, place=self.place)并像这样使用它session.add(DestDB(**src_obj.as_dict()))尽管您可以更动态地执行此操作,但我仍然建议使用更明确的方法。class SourceDB(Base):    __tablename__ = "source_db"    id = Column(Integer, primary_key=True)    name = Column(String(100))    place = Column(String(100))    def as_dict(self, fields):        return dict(field: getattr(self, field) for field in fields if hasattr(self, field))并这样做session.add(DestDB(src_obj.as_dict(("name", "place"))))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python