Имеется DB модель и DTO к ней. После выполнения выборки из БД в виде списка DTO, с элементами списка выполняется работа — поля обновляются и нужно подключиться к БД и обновить строки таблицы, соответсвующие DTO-шкам.
Как это сделать? застрял опять
@dataclass
class MyData1:
name: str
id: int = None
@classmethod
def fromMyTable1(cls, elem):
return cls(id=elem.id, name=elem.name)
@classmethod
def toMyTable1(cls, elem):
return MyTable1(id=elem.id, name=elem.name)
class MyTable1(Base):
__tablename__ = 'MyTable1'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
def getAll() -> List[MyData1]:
result = []
with sessionScope() as session:
rows = session.query(MyTable1).all()
for row in rows:
result.append(MyData1.fromMyTable1(row))
return result
def insertAll(datas: List[MyData1]):
with sessionScope() as session:
for data in datas:
row = MyData1.toMyTable1(data)
print(row.id, row.name)
# HOW TO UPDATE ???
P.S. Нужно разделить выборку данных и обновление, и делать это не в рамках одной сессии. Т.е. я выбрал данные, поработал и потом сохранил:
myDatas = getAll()
for data in myDatas:
data.name = 'my_{}'.format(data.name)
insertAll(myDatas)
P.S.2 почемуто не элегантным мне кажеться такое решение
def insertAll(datas: List[MyData1]):
with sessionScope() as session:
for data in datas:
row = MyData1.toMyTable1(data)
rows = session.query(MyTable1).filter(MyTable1.id==row.id) \
.update({'name': row.name})
как всегда, сам не знаю, но что-то не устраивает ))) может можно не перебирать все поля?
python, sqlalchemy