#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 мои извинения, я пропустил это. Я включил