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

2024-09-27 21:33:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一条路线,跟踪产品的所有历史记录。我为product创建了一个模型,为producthistory创建了一个类似的模型。现在,无论何时创建对象,我都希望它保存在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

Tags: idtrueurldbstring产品requestcolumn
1条回答
网友
1楼 · 发布于 2024-09-27 21:33:32

您可以尝试events,它基本上是钩子,在DB的某些操作之后执行。据我所知,您需要一个after_insert钩子:https://docs.sqlalchemy.org/en/13/orm/events.html#sqlalchemy.orm.events.MapperEvents.after_insert

在您的情况下,它将是:

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

相关问题 更多 >

    热门问题