Вам придется немного импровизировать в этом ответе, поскольку у меня нет доступа к Oracle.
Предположим, есть файл с именем so.csv
, который содержит данные, показанные в вашем вопросе.
Создайте файл с именем so.py
примерно так. Я добавлю кусочки кода и некоторые пояснения. Вы можете собрать файл вместе или скопировать / вставить его отсюда: https://rextester.com/JLQ73751.
В верхней части файла импортируйте свою зависимость от Oracle:
# import cx_Oracle
# https://www.oracle.com/technetwork/articles/dsl/python-091105.html
Затем создайте функцию, которая анализирует ваш so.csv
и помещает таблицу и столбцы в словарь следующим образом: {'Table 1': ['Col1', 'Col2', 'Col3'], 'Table 2': ['Col11', 'Col12']}
def get_tables_columns(filename):
tables = {}
with open(filename) as f:
for line in f:
line = line.strip()
if 'Primary Key' in line:
continue
cols = line.split('|')
table = cols[1].strip()
col = cols[2].strip()
if table in tables:
tables[table].append(col)
else:
tables[table] = [col]
return tables
Затем создайте функцию, которая генерирует sql, если ей известны таблица и список столбцов:
def get_sql(table, columns):
statement = 'select {0} from {1} group by {0} having count(*) > 1'.format(
', '.join(columns),
table.replace(' ', '')
)
return statement
Пора выполнять функции:
if __name__ == '__main__':
tables = get_tables_columns('so.csv')
# here goes your code to connect with Oracle
# con = cx_Oracle.connect('pythonhol/welcome@127.0.0.1/orcl')
# cur = con.cursor()
for table in tables:
sql = get_sql(table, tables[table])
print(sql)
# here goes your sql statement execution
# cur.execute(sql)
# for result in cur:
# print result
# close your Oracle connection
# con.close()
Вы можете включить свои операторы, связанные с Oracle, и запустить файл python.