Python 同时在两个模型中保存对象的实例

Python 同时在两个模型中保存对象的实例,python,django,sqlalchemy,fastapi,Python,Django,Sqlalchemy,Fastapi,我正在尝试创建一条路线,跟踪产品的所有历史记录。我为产品创建了一个模型,为产品历史创建了一个类似的模型。现在,无论何时创建对象,我都希望它保存在product表以及producthistory表中。两个表中唯一的区别是id字段。producttable包含产品的id;producthistorytable包含historytable的id字段以及产品的id。我想用产品的id进行筛选,以便进一步使用数据。如何在producthistory表中插入product对象以及在该时间点创建的产品的id 以

我正在尝试创建一条路线,跟踪产品的所有历史记录。我为
产品
创建了一个模型,为
产品历史
创建了一个类似的模型。现在,无论何时创建对象,我都希望它保存在
product
表以及
producthistory
表中。两个表中唯一的区别是id字段。
producttable
包含产品的id;
producthistorytable
包含
historytable
的id字段以及产品的id。我想用产品的id进行筛选,以便进一步使用数据。如何在producthistory表中插入product对象以及在该时间点创建的产品的id

以下是模型:

class Product(Base):
    __tablename__ = "product"

    id = Column(Integer, primary_key=True, index=True)
    product_url= Column(String)
    current_price= Column(Integer)
    updated_at= Column(String)
    created_at= Column(String)
    target_price= Column(Integer)
    product_name= Column(String)


class ProductHistory(Base):
    __tablename__ = "producthistory"

    id = Column(Integer, primary_key=True, index=True)
    product_id = Column(Integer)
    product_url= Column(String)
    current_price= Column(Integer)
    updated_at= Column(String)
    created_at= Column(String)
    target_price= Column(Integer)
    product_name= Column(String)
以下是创建产品的逻辑:

@app.post('/createproducts/')
def createproducts(request: Product, db:Session = Depends(get_db)):
    product = models.Product(
        product_url= request.product_url,
        current_price= request.current_price,
        updated_at= request.updated_at,
        created_at= request.created_at,
        target_price= request.target_price,
        product_name= request.product_name
    )
    db.add(product)
    db.commit()
    db.refresh(product)
    return product

您可以尝试
事件
,它们基本上是钩子,在使用DB执行某些操作之后执行。据我所知,插入后需要一个
挂钩:

在您的情况下,它将是:

from sqlalchemy import event


@event.listens_for(Product, 'after_insert')
def receive_after_insert(mapper, connection, target):
    # target is the created instance of Product

    # ... create an instance of ProductHistory from target...

这回答了你的问题吗?