Проблема со сравнением данных файла csv и результатов sql-запроса/СУБД Oracle 11g

halfrang

Новичок
Пользователь
Авг 22, 2020
2
0
1
1. Win 7 64X
2. Python 3.8
3 Pip 20.1.1

Имеем:
1. Простенький файл csv c двумя столбцами.
2. Подключение к СУБД Oracle с SQL запросом внутри скрипта.
Необходимо:
Сравнить номера комнат из первого столбца csv файла с номерами комнат 1 столбца полученных данных SQL запроса. Вывести на печать совпадения.
Проблема в том, что при сравнении учитывается только последняя строка из списка csv. Сам код привожу ниже:

import csv
with open('arr.csv') as f:
reader=(csv.reader(f, delimiter=' '))
for room,sn in reader:
print(room, sn)
import cx_Oracle

dsn_tns = cx_Oracle.makedsn('172.17.115.91', '1521', service_name='training)
conn = cx_Oracle.connect(user='user', password='pass, dsn=dsn_tns)
print('Номера, попавшие в список:')
d = conn.cursor()
d.execute("""select r.room,
case
r.fo_status when 'OCC' then 'ЗАНЯТ'
when 'VAC' then 'СВОБОДЕН'
end fo,
case
r.room_status
when 'DI' then 'Clean'
when 'CL' then 'Dirty'
when 'IP' then 'Inspected'
when 'OS' then 'Out of service'
when 'OO' then 'Out of order'
end status
from opera.room_view r""")

for row in d:
if row[0] in room:
print (row[0], ';', row[1], ';', row[2])
conn.close()


Результат:
room sn
K314 SB1A040392
A301 SB1A026556
A201 SB24087472
K313 SB24069183
Номера, попавшие в список:
K313 ; ЗАНЯТ ; Clean



Желаемый результат:

room sn
K314 SB1A040392
A301 SB1A026556
A201 SB24087472
K313 SB24069183
Номера, попавшие в список:
K314 ; СВОБОДЕН ; Clean
A301 ; ЗАНЯТ ; Dirty
A201 ; ЗАНЯТ ; Dirty
K313 ; ЗАНЯТ ; Clean
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Код вставляйте через кнопку ... -> код -> python (без этого не понятно как у вас установлены отступы).
Насчет ошибки. В этих строках вы выводите содержимое csv файла из ридера на экран:
Python:
for room,sn in reader:
    print(room, sn)
в итоге в переменные room,sn попадают значения из последней строки, которые и учитываются в сравнение if row[0] in room:. Нужно вместо вывода на экран добавлять значения в список и потом сравнивать row[0] из базы со всеми значениями из списка.
 
  • Мне нравится
Реакции: halfrang

halfrang

Новичок
Пользователь
Авг 22, 2020
2
0
1
Код вставляйте через кнопку ... -> код -> python (без этого не понятно как у вас установлены отступы).
Насчет ошибки. В этих строках вы выводите содержимое csv файла из ридера на экран:
Python:
for room,sn in reader:
    print(room, sn)
в итоге в переменные room,sn попадают значения из последней строки, которые и учитываются в сравнение if row[0] in room:. Нужно вместо вывода на экран добавлять значения в список и потом сравнивать row[0] из базы со всеми значениями из списка.

Спасибо, да, я уже понял что с типом переменной облажался. Сделал список и все заработало.
 

Форум IT Специалистов