Найти - Пользователи
Полная версия: Python SQL - переименовать столбцы в csv
Начало » Python для новичков » Python SQL - переименовать столбцы в csv
1
Quaresma
Здравствуйте уважаемые гуру,

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

JOHN_16
Quaresma
в самом SQL нельзя это сделать, ибо название очень длинное и изобилует всякими пробелами и скобками
ну это не правда, ну ведь оно же со всеми этими пробелами и скобками как то работает? Зарпосы то делаются и выполняются. Может там банально названия столбцов в кавычках писать?
Striver
но как мне переменовать столбец ?
Как я понимаю, названия столбцов в 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)



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

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

завтра с работы скину ошибку - писала length чего-то там 30 символов
Quaresma
Striver
Вместо этого можно взять содержимое cursor.description и изменить по вкусу, а потом уже писать в файл, как-то так:
спасибо - завтра попробую, и отпишусь
Quaresma
Rafik
Насколько понимаю в csv должны быть иные имена колонок. Нет ничего проще: строку writer.writerow(col for col in cursor.description) необходимо переделать приблизительно так:
спасибо - завтра попробую, и отпишусь
Quaresma
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)

Спасибо огромное - именно так все и получилось
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB