Python для форматирования CSV-файла для обработки выходных данных из SQLPlus

#python #csv #sqlplus

#питон #csv #sqlplus

Вопрос:

Я изо всех сил пытаюсь собрать скрипт на python, который будет обращаться к базе данных Oracle с помощью SQLPlus. Оттуда он выполнит несколько SELECT запросов и вернет их в .csv файл, который я могу открыть с помощью Excel.

У меня есть рабочая программа, однако форматирование .csv не совсем такое, как я хочу, и я в тупике.

Чего я хочу, так это чего-то вроде следующего… (где | находится столбец в электронной таблице)

 NAME | AGE | CITY John | 50 | California Mark | 55 | Washington  JD | 34 | Toronto  

select name, city, age from accounts;

Мой код приведен ниже вместе с выводом. Любые предложения помогут.

 import subprocess from subprocess import Popen, PIPE import csv  def run_sqlplus(sql_command, connect_string):  session = Popen(['sqlplus','-S',connect_string], stdin=PIPE, stdout=PIPE, stderr=PIPE)  (stdoutbytes,stderrbytes) = session.communicate(sql_command.encode('utf-8'))  return (stdoutbytes.decode('utf-8'),stderrbytes.decode('utf-8')) header = ['NAME','AGE',CITY'] usr_file = 'Test.csv' connect_string = 'user/pass@MYDB' sql_command = """SET HEADING OFF SET MARKUP CSV ON SET colsep , SET pagesize 0 SET linesize 2 SET numwidth 5 SELECT name,age,city from accounts where age gt; 50; SELECT city from accounts; """  query_result = run_sqlplus(sql_command,connect_string)  with open(usr_file, 'w') as csvfile:  header_writer = csv.writer(csvfile,delimiter=',', lineterminator="n",  escapechar='\',quoting=csv.QUOTE_MINIMAL)  file_writer = csv.writer(csvfile,delimiter='|', lineterminator="n",quoting=csv.QUOTE_NONE,escapechar='\')  header_writer.writerow(header)  file_writer.writerow(query_result[0])  

ВОЗВРАТ:

 "|J|O|H|N|"| | |"|5|0|"| | ||"|C|A|L|I|F|O|R|N|I|A|"| | "|M|A|R|K|"| | |"|5|5|"| | ||"|W|A|S|H|I|N|G|T|O|N|"| | | |   

Примечание | обозначает отдельный столбец при просмотре .csv в Excel

Комментарии:

1. Почему вы используете другой разделитель для заголовка по сравнению с запрос и где заголовок в вашем результате?

2. @kpie мои извинения, я пропустил это. Я включил