Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy使用table1.schema==table2.schema选择进入_Python_Python 3.x_Sqlalchemy_Crud - Fatal编程技术网

Python SQLAlchemy使用table1.schema==table2.schema选择进入

Python 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:

我正在制作一个小而简单的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:
        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条件选择*进入历史。