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
无关。因此,添加这种方法违反了关注点的分离。仅供参考-我会将答案标记为已接受,因为它回答了我在更改游戏之前的原始问题!