Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 2, 2019 09:18:58

Quaresma
Зарегистрирован: 2019-02-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Python SQL - переименовать столбцы в csv

Здравствуйте уважаемые гуру,

Есть нетривиальная задача: некий 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)

SQL запрос успешно проходит, csv успешно создается, но как мне переменовать столбец ?
Спасибо

PS. конечный csv выглядит так:

DATAID SomeProcess Some_FUNCTION LAST_NAME_ENG
00000000 process name function name name
00000000 process name function name name
00000000 process name function name name
00000000 process name function name name
00000000 process name function name name

Отредактировано FishHook (Апрель 2, 2019 09:46:16)

Офлайн

#2 Апрель 2, 2019 14:54:26

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Python SQL - переименовать столбцы в csv

Quaresma
в самом SQL нельзя это сделать, ибо название очень длинное и изобилует всякими пробелами и скобками
ну это не правда, ну ведь оно же со всеми этими пробелами и скобками как то работает? Зарпосы то делаются и выполняются. Может там банально названия столбцов в кавычках писать?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Апрель 2, 2019 15:19:11

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Python SQL - переименовать столбцы в csv

но как мне переменовать столбец ?
Как я понимаю, названия столбцов в csv пишутся в этой строке:
 writer.writerow(col[0] for col in cursor.description)
Вместо этого можно взять содержимое 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)





Офлайн

#4 Апрель 2, 2019 15:20:58

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Python SQL - переименовать столбцы в csv

Насколько понимаю в 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)

Офлайн

#5 Апрель 2, 2019 15:33:11

Quaresma
Зарегистрирован: 2019-02-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Python SQL - переименовать столбцы в csv


JOHN_16
ну это не правда, ну ведь оно же со всеми этими пробелами и скобками как то работает? Зарпосы то делаются и выполняются. Может там банально названия столбцов в кавычках писать?

завтра с работы скину ошибку - писала length чего-то там 30 символов

Офлайн

#6 Апрель 2, 2019 15:33:59

Quaresma
Зарегистрирован: 2019-02-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Python SQL - переименовать столбцы в csv

Striver
Вместо этого можно взять содержимое cursor.description и изменить по вкусу, а потом уже писать в файл, как-то так:
спасибо - завтра попробую, и отпишусь

Офлайн

#7 Апрель 2, 2019 15:34:09

Quaresma
Зарегистрирован: 2019-02-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Python SQL - переименовать столбцы в csv

Rafik
Насколько понимаю в csv должны быть иные имена колонок. Нет ничего проще: строку writer.writerow(col for col in cursor.description) необходимо переделать приблизительно так:
спасибо - завтра попробую, и отпишусь

Офлайн

#8 Апрель 4, 2019 08:32:25

Quaresma
Зарегистрирован: 2019-02-03
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

Python SQL - переименовать столбцы в csv

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)

Спасибо огромное - именно так все и получилось

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version