Python SQLAlchemy使用table1.schema==table2.schema选择进入
我正在制作一个小而简单的API,用于执行一些CRUD操作。我以前从未使用过ORM 我有两个模式完全相同的表,一个用于活动状态,另一个用于历史事件 我想出了一种将记录插入历史表格的老套方法: crud.pyPython SQLAlchemy使用table1.schema==table2.schema选择进入,python,python-3.x,sqlalchemy,crud,Python,Python 3.x,Sqlalchemy,Crud,我正在制作一个小而简单的API,用于执行一些CRUD操作。我以前从未使用过ORM 我有两个模式完全相同的表,一个用于活动状态,另一个用于历史事件 我想出了一种将记录插入历史表格的老套方法: crud.py def update_active(db: Session, active: schemas.Active): if active.case_1: active.status = "Case 1" elif active.case_2:
def update_active(db: Session, active: schemas.Active):
if active.case_1:
active.status = "Case 1"
elif active.case_2:
active.status = "Case 2"
elif active.case_3:
active.status = "Case 3"
else:
active.case_4= "Case 0"
active.timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
if not active.case_end:
active.case_end = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
if active.status == "Case 0":
history = db.query(models.Active).filter(
models.Active.node_id == active.node_id and
models.Active.frequency == active.frequency and
models.Active.status != active.status
).all()
for result in history:
copy_res = result.__dict__.copy()
copy_res.pop('_sa_instance_state')
query = insert(models.History).values(**copy_res)
db.execute(query)
db.query(models.Active).filter(
models.Active.node_id == active.node_id and
models.Active.frequency == active.frequency
).update(active)
db.commit()
return active
我不喜欢这部分:
for result in history:
copy_res = result.__dict__.copy()
copy_res.pop('_sa_instance_state')
query = insert(models.History).values(**copy_res)
db.execute(query)
是否有更好的方法将它们插入到历史表中?如果模式相同,我会使用“裸”SQL,结果会更快。我只想在models.py和schemas.py中维护模式,如果不这样做,我也必须在裸SQL查询中维护模式。当然,我可以从字典中建立它,但我们仍然站在黑客的一边。或者您是否有更好的想法?
插入表2中,从表1中选择*条件代码>我不想维护sql查询。我只是觉得在sqlalchemy中有一种简单的方法可以做到这一点:当使用两个相同的模式时,从active WHERE条件选择*进入历史。如果模式相同,我会使用“裸”SQL,我只想在models.py和schemas.py中维护模式,如果我不这样做,我也必须在裸sql查询中维护模式。当然,我可以从字典中建立它,但我们仍然站在黑客的一边。或者您是否有更好的想法?插入表2中,从表1中选择*条件代码>我不想维护sql查询。我只是觉得在sqlalchemy中有一种简单的方法可以做到这一点:当使用两个相同的模式时,从activewhere条件选择*进入历史。