Цикл Python3 FOR не зацикливает весь список параметров, используемый для передачи параметров postgressql - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть набор метеорологических данных.

1. Запрос: Первый запрос возвращает мне список всех идентификаторов и идентификаторов для активных автоматических измерительных станций
sql_boberamp = """select a.id, a.idmm
                  from id_obs a, idmm b 
                  where a.tip=4 and 
                      a.datum_konca='10000-1-1' 
                      and b.idmm=a.idmm and a.id in 
                      (select c.id 
                       from parametri c 
                       where c.id_parametra>3005 and 
                           c.datum_konca='10000-1-1') order by 
                           a.idmm"""
cur1.execute(sql_boberamp)
boberamp_lst = cur1.fetchall()

Идентификатор столбцова idmm можно превратить в словарь

2. Запрос: я передаю 3 параметра.Запрос рассчитывает на один ампер, сколько раз каждый наблюдаемый параметр был измерен для определенного дня.
ids = 2210
idmms = 11
params = idmms, idmms, idmms, ids
testtable_sql = []
sql_stevec = """select a.id_parametra,
                    case when  a.id_parametra in 
                        (3005,3010,3011,3040,3045,3046,3047, 3391) 
                        then (select count(*) from amp_o b where 
                        b.datum='2018-04-16' and b.par=a.id_parametra                             
                        and b.tip=4 and b.idmm=%s)
                    when a.id_parametra in (3120, 3121, 3124, 3420) 
                        then (select count(*) from amp_p_10min b where 
                        b.datum='2018-04-16' and b.par=a.id_parametra 
                        and b.tip=4  and b.idmm=%s)
                    when a.id_parametra in (3180, 3181, 3188, 3189) 
                        then (select count(*) from amp_v b where 
                        b.datum='2018-04-16' and b.par=a.id_parametra 
                        and b.tip=4  and b.idmm=%s)
                end as stevec
                from parametri a
                where a.id=%s and datum_konca='10000-1-1' and 
                        a.id_parametra>3000
                order by a.id_parametra"""

cur.execute(sql_stevec,params)
testlist2_sql = cur.fetchall()
testtable_sql.append(testlist2_sql)

Моя цель - запустить запрос 3.

3 Запрос: этот цикл FOR должен выполнить запрос 2 (запрос рассчитывает на один ампер, сколько раз измерялся каждый измеряемый параметр для конкретногодень) для всех моих рабочих усилителей.
ids = [2210, 2662,872]
idmms = [11,1948, 907]
testtable_for_sql = []

for row in ids:
    ids_row = ids[0]
        for row in idmms:
            idmms_row = idmms[0]

            params = idmms_row, idmms_row, idmms_row, ids_row
            print(params)
            cur.execute(sql_stevec,params)
            testlist_for_sql = cur.fetchall()
            testtable_for_sql.append(testlist_for_sql)
            print('----    inside FOR loop ----',testtable_for_sql)
print('---- outside FOr loop ----',testtable_for_sql)

Это мой результат:

(11, 11, 11, 2210)
('----    inside FOR loop ----', [])
(11, 11, 11, 2210)
('----    inside FOR loop ----', [])
(11, 11, 11, 2210)
('----    inside FOR loop ----', [])
(11, 11, 11, 2210)
('----    inside FOR loop ----', [])
(11, 11, 11, 2210)
('----    inside FOR loop ----', [])
(11, 11, 11, 2210)
('----    inside FOR loop ----', [])
(11, 11, 11, 2210)
('----    inside FOR loop ----', [])
(11, 11, 11, 2210)
('----    inside FOR loop ----', [])
(11, 11, 11, 2210)
('----    inside FOR loop ----', [])
('---- outside FOr loop ----', [])

Я не понимаю, почему он не проходит все три строки в моих данных для идентификаторов и идентификаторов.Я просто могу взломать этот цикл FOR в скрипте Python.Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 24 апреля 2018

Я думаю, это то, что вы ищете. Вы использовали idmms [0] и ids [0], поэтому вы использовали только первый элемент в каждом списке и игнорировали итерацию по существу.

ids = [2210, 2662,872]
idmms = [11,1948, 907]
testtable_for_sql = []

for ids_row in ids:
    for idmms_row in idmms:
        params = idmms_row, idmms_row, idmms_row, ids_row
        print(params)
        cur.execute(sql_stevec,params)
        testlist_for_sql = cur.fetchall()
        testtable_for_sql.append(testlist_for_sql)
        print('----    inside FOR loop ----',testtable_for_sql)
print('---- outside FOr loop ----',testtable_for_sql)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...