【问题标题】:SQLITE3, Request/Update Row by RowSQLITE3,逐行请求/更新
【发布时间】:2021-06-03 08:00:52
【问题描述】:

我想在 sql 表中检查一些条件(逐行),如果给定条件,则使用值更新该行中的特定列。

表格如下所示:

sql_instruction = """
CREATE TABLE IF NOT EXISTS weather (
        "Value1" REAL,
        "Data1" REAL,
        "Param1" REAL,
        "Data2" REAL,
        "Param2" REAL,
        "Data3" REAL,
        "Param3" REAL,
        "TotalParam" REAL,
        "MAX" REAL,
        "MIN" REAL,
        "startdate" REAL,
        "enddate" REAL
        ); """
cursor.execute(sql_instruction)
connection.commit()

我想检索 TotalParam = 0 的行的“结束日期”,用另一个表中的值计算 MAX 和 MIN(没问题),计算一些其他的东西,然后更新计算的输出Param1、Param2、Param3 和 TotalParam = Param1+Param2+Param3

我的方法(对于 MAX)是:

cursor.execute("SELECT COUNT(*) FROM weather")
lenght_table = cursor.fetchone()[0]
print('lenght of table: 'lenght_table)

for t in lenght_table:
    cursor.execute("SELECT enddate100 FROM weather WHERE TotalParam = 0 AND rowid BETWEEN ? AND ?", ([t-1], [t]))
    intermed_preddate100 = cursor.fetchone()[0]
    intermed_preddate100 = datetime.datetime.strptime(intermed_preddate100, dformat)
    cursor.execute("SELECT MAX(close) from weatherdata WHERE Date BETWEEN ? AND ? ORDER BY Date", (intermed_preddate100, ldate_reg))
    compare_max_reg100 = cursor.fetchone()[0]
    compare_max_reg100 = float(compare_max_reg100)

我知道这对检索部分不起作用,但也许你们中的任何人都知道如何克服我一周以来一直试图解决的这个障碍......

提前谢谢你!

【问题讨论】:

    标签: python sqlite


    【解决方案1】:

    我不完全理解您的程序逻辑,但也许可以正常工作:

    UPDATE weather SET TotalParam = Param1+Param2+Param3, Param1='something' where TotalParam = 0 and <something else>
    

    【讨论】:

    • 也许这有助于您的理解: 1. 步骤:从表中检索数据“enddate”,其中“TotalParam”= 0 的第一行是这种情况 2. 步骤:计算一些东西使用该数据 3. 在 step1 从(但另一列)获取数据的同一行中输入计算结果
    • select _rowid_, EndDate, Param1, Param2 from weather where TotalParam = 0 并且您在 sqlite 中有确切的行(_rowid_)应该更新哪些记录。你可以使用update 以...结尾的句子。where "_rowid_" in (list_of__rowid_s) 如果可以在 SQL 句子中执行计算(步骤 2)
    • 我今天会试试这个并尽快提供反馈。!计算将在 python 中完成,因为它是一个带有几个回归分析计算的预测。但是你的评论给了我一个提示如何解决这个问题!
    • 也许WHERE rowid IN (SELECT rowid FROM weather ORDER BY rowid ASC LIMIT 1) 也会有所帮助
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2014-12-27
    • 2014-10-26
    相关资源
    最近更新 更多