一千萬個為什麽

搜索

根據最小值和最大值確定布爾值

現在我有來自table1的min,max值,它定義了一個值的範圍。 table2中有一個boolean列,其值由table1中的min和max值確定。如果實際數字在該範圍內,則該值將為F(表示沒有問題),反之亦然。在我運行我的代碼後,只有列的前兩行顯示為false。我不知道我的代碼有什麽問題。我的for循環塊代碼如下。其中,records1是table2中的實際值,records2和records3分別是table1中的最小值和最大值。我使用這個forloop語句來獲取三組數字的單個記錄,然後在其中的if語句中,我通過檢查record1是否落在min(record2)和max(record3)之間的範圍內來確定布爾列的每個值。 )價值觀。

    conn = psycopg2.connect(conn_string)
    # conn.cursor will return a cursor object, you can use this cursor to perform queries

    #get the actual number
    curs1 = conn.cursor()
    statement='SELECT value FROM table2'
    curs1.execute(statement)
    records1=curs1.fetchall()

    #get the minimum number
    curs2 = conn.cursor()
    statement2='SELECT min FROM table1'
    curs2.execute(statement2)
    records2=curs2.fetchall()

    #get the maximum number
    curs3 = conn.cursor()
    statement3='SELECT max FROM table1'
    curs3.execute(statement3)
    records3=curs3.fetchall() 


    for record1 in records1:
        for record2 in records2:
            for record3 in records3:
                while record1 >= record2 and record1 <=record3::
                    statement4='UPDATE table2 SET column = false WHERE record1 >=   record2 and record1 <= record3'
                    curs4 = conn.cursor()
                    curs4.execute(statement4)

                else:
                    statement5='UPDATE table2 SET column = true WHERE record1 <= record2 or record1 >= record3'
                    curs5 = conn.cursor()
                    curs5.execute(statement5)
                conn.commit()
                conn.close()

有人可以指出我錯在哪裏嗎?事先提前

最佳答案

註意範圍在python中的工作方式...

>>> range(1,5)
[1, 2, 3, 4]
>>>

你可能最好做一個比較聲明:

if record2 <= record1 <= record3:

從你看來你用你的語句更新整個表而不是你的比較中的記錄行。

我認為你在for循環中是多余的,而sql語句應該處理你想要完成的事情,或者你需要為行傳入一個id並將其用於WHERE子句。

轉載註明原文: 根據最小值和最大值確定布爾值