определить логическое значение на основе минимального и максимального значения - PullRequest
0 голосов
/ 11 марта 2011

сейчас у меня есть минимальное, максимальное значение из таблицы1, которое определяет диапазон значения.В таблице 2 есть логический столбец, значение которого определяется значением min и max в таблице table1.Если фактическое число находится в пределах диапазона, значение будет F (означает, что нет проблем), и наоборот.после того, как я запустил свои коды, только первые две строки столбца оказались ложными.Я не знаю, что не так с моими кодами.Мои коды для цикла блока, как показано ниже.Из которых records1 - это фактические значения в таблице2, а записи2 и записи3 - минимальные и максимальные значения из таблицы1 соответственно.Я использую этот оператор 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()

Может кто-нибудь указать, где я не прав?ТКС заранее

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

обратите внимание, как диапазон работает в python ...

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

Возможно, вам лучше сделать заявление о сравнении:

if record2 <= record1 <= record3:

также, судя по всему, вы обновляете всю таблицу с помощью своего оператора вместо строки записей в своем сравнении.

Я думаю, что вы избыточны с циклом for, вместо этого оператор sql должен позаботиться о том, что вы пытаетесь выполнить, или вам нужно передать id для строк и использовать его для предложения WHERE.

0 голосов
/ 21 марта 2011

Я решил это, используя следующее утверждение:

 statement1='UPDATE table2 SET column= false WHERE value >= (SELECT min FROM table1 WHERE
 table1.common_name=table2.common_name) AND value <=(SELECT max FROM table1 WHERE 
 table1.common_name=table2.common_name)'

...

вместо использования переменной в forloop, я использовал оператор выбора, в котором я использовал предложение WHERE для определения соответствующей записи min и max. Это кажется лучшим способом сделать это.

...