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

Python 如何将记录从一个表转移到另一个表?,python,sqlalchemy,Python,Sqlalchemy,我有以下示例表: 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(1

我有以下示例表:

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))

我只想转移
名称
位置
字段。

我建议坚持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"))))

谢谢只是为了证实;您可以推荐第一种方法,即
返回dict(name=self.name,place=self.place)
?不客气。确切地它简单、明确、易读。您需要查询
SourceDB
,遍历要传输的记录,并在
DestDB
中创建新记录。在这种情况下,我建议动态创建字典。我认为您正在解决的问题与
SourceDB
无关。因此,添加这种方法违反了关注点的分离。仅供参考-我会将答案标记为已接受,因为它回答了我在更改游戏之前的原始问题!