Код: Выделить всё
class DataTable(Base):
__tablename__ = "data_table"
id: Mapped[int] = mapped_column(primary_key=True)
system_id: Mapped[int] = mapped_column(ForeignKey("system.id"))
system: Mapped["System"] = relationship()
data_feature: Mapped[int] = mapped_column(String(32))
class System(Base):
__tablename__ = "system"
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(String(16))
system_feature: Mapped[str] = mapped_column(String(16))
Код: Выделить всё
system_table = session.execute(select(System.id, System.name)).all()
system_table_df = pandas.DataFrame(system_table)
new_data = myData.merge(system_table_df, left_on='system_name',
right_on='name').drop(['system_name', 'name'], axis=1)
new_data.rename(columns={'id': 'system_id'}, inplace=True)
Код: Выделить всё
session.execute(insert(DataTable).values(myData.to_dict(orient='records'))
session.commit()
Я попробовал с помощью метода Insert().returning(), который подвел меня довольно близко, но не совсем выполнил свою работу. Я не знаю, как перехватить атрибут system_name из myData и использовать его в предложенииwhere.
Код: Выделить всё
session.execute(
insert(DataTable).values(
system_id=select(System.id).where(System.name == "???")
).returning(DataTable), myData.to_dict(orient="records"))
Подробнее здесь: https://stackoverflow.com/questions/786 ... lchemy-2-0