对两列数据进行SQL计算并更新第三列的值

2024-06-13 14:25:24 发布

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

我的目标是在2列上计算一些数学,并用3列上的结果更新数据库。我正在为数据库使用SQLITE3。目前的数学计算非常简单,因此可以获得下面的SQL更新函数来更新数据库的40000行。随着数学变得越来越复杂,我的目标是在查询两列上的数据库并随后更新第三行之后,用python计算数学。更新第三列的最佳方式是什么?如果在所有行之间循环,SET函数倾向于使用最后一个循环的值更新整个列。多谢

当前用于更新ebitev和capreturn列的SQL代码,对来自早期列的输入进行简单计算

db = SQL("sqlite:///formula.db")

inventories=db.execute("SELECT ticker, ebit, ev, ppnenet, fcf, workingcapital FROM equity")

"""liste=[]"""

for inventory in inventories:
    ebit = inventory["ebit"]
    ev = inventory["ev"]
    ppnenet = inventory["ppnenet"]
    workingcapital = inventory["workingcapital"]
    fcf = inventory["fcf"]

    if ev == 'NULL':
        db.execute("UPDATE equity SET ebitev='NULL'")
    else:
        ebitev = ebit / ev
        """liste.append(ebitev)"""
        db.execute("UPDATE equity SET ebitev=ebit/ev")

    if ppnenet == 'NULL' or workingcapital == 'NULL':
        db.execute("UPDATE equity SET capreturn='NULL'")
    else:
        db.execute("UPDATE equity SET capreturn=ebit/(ppnenet+workingcapital)")

    if fcf == 'NULL':
        db.execute("UPDATE equity SET fcfyield='NULL'")
    elif ev == 'NULL':
        db.execute("UPDATE equity SET fcfyield='NULL'")
    else:
        db.execute("UPDATE equity SET fcfyield=fcf/ev")

Tags: 数据库executedbupdate数学nullinventoryset