Форум сайта python.su
0
Здравствуйте уважаемые гуру,
Есть нетривиальная задача: некий SQL запрос посредством Python вывести в csv файл в табличку.
и там уже переименовать названия столбцов в новые имена (в самом SQL нельзя это сделать, ибо название очень длинное и изобилует всякими пробелами и скобками)
Сам мой запрос выглядит так:
import cx_Oracle hostname = 'oracleDB' port = 1521 SID = 'SID' dsn_tns = cx_Oracle.makedsn(hostname, port, SID) connection = cx_Oracle.connect('username', 'password', dsn_tns) cursor = connection.cursor() mySQLQuery = (""" SQL REQUST (name1, name2, name3, empl) """) cursor.execute(mySQLQuery) results = cursor.fetchall() # SQL query select for row in results: name1 = row[0] name2 = row[1] name3 = row[2] empl = row[3] print("DataID :" + str(name1) + " SomeProcess " + str(name2) + " SomeFunction " + str( name3) + " LastNameEng " + str(empl)) import pandas import csv cursor.execute(mySQLQuery) with open("output.csv", "w", newline='') as outfile: writer = csv.writer(outfile, quoting=csv.QUOTE_NONNUMERIC) writer.writerow(col[0] for col in cursor.description) for row in cursor: writer.writerow(row)
Отредактировано FishHook (Апрель 2, 2019 09:46:16)
Офлайн
221
Quaresmaну это не правда, ну ведь оно же со всеми этими пробелами и скобками как то работает? Зарпосы то делаются и выполняются. Может там банально названия столбцов в кавычках писать?
в самом SQL нельзя это сделать, ибо название очень длинное и изобилует всякими пробелами и скобками
Офлайн
22
но как мне переменовать столбец ?Как я понимаю, названия столбцов в csv пишутся в этой строке:
writer.writerow(col[0] for col in cursor.description)
# сразу после cursor.execute(mySQLQuery) columns = list(cursor.description) columns[0] = "data_id" columns[2] = "some_function" ... # А потом уже файл открывать with open("output.csv", "w", newline='') as outfile: writer = csv.writer(outfile, quoting=csv.QUOTE_NONNUMERIC) writer.writerow(columns) for row in cursor: writer.writerow(row)
Офлайн
27
Насколько понимаю в csv должны быть иные имена колонок. Нет ничего проще: строку writer.writerow(col for col in cursor.description) необходимо переделать приблизительно так:
def pereimenovanie(descr): rezult = [] for col in descr: # Здесь твой алгоритм переименования col[0] в new_name result.append(new_name) return rezult # вместо writer.writerow(col[0] for col in cursor.description) writer.writerow(pereimenovanie(cursor.description))
Отредактировано Rafik (Апрель 2, 2019 15:23:16)
Офлайн
0
JOHN_16
ну это не правда, ну ведь оно же со всеми этими пробелами и скобками как то работает? Зарпосы то делаются и выполняются. Может там банально названия столбцов в кавычках писать?
Офлайн
0
Striverспасибо - завтра попробую, и отпишусь
Вместо этого можно взять содержимое cursor.description и изменить по вкусу, а потом уже писать в файл, как-то так:
Офлайн
0
Rafikспасибо - завтра попробую, и отпишусь
Насколько понимаю в csv должны быть иные имена колонок. Нет ничего проще: строку writer.writerow(col for col in cursor.description) необходимо переделать приблизительно так:
Офлайн
0
Striver
Как я понимаю, названия столбцов в csv пишутся в этой строке:
writer.writerow(col for col in cursor.description)
Вместо этого можно взять содержимое cursor.description и изменить по вкусу, а потом уже писать в файл, как-то так:
# сразу после cursor.execute(mySQLQuery)
columns = list(cursor.description)
columns = “data_id”
columns = “some_function”
…
# А потом уже файл открывать
with open(“output.csv”, “w”, newline='') as outfile:
writer = csv.writer(outfile, quoting=csv.QUOTE_NONNUMERIC)
writer.writerow(columns)
for row in cursor:
writer.writerow(row)
Офлайн