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...
这回答了你的问题吗?