Python 3: как отформатировать вывод SQL-запроса из подпроцесса (Popen) - PullRequest
0 голосов
/ 22 марта 2019

Я использую python для запроса БД в моей компании, после миграции Windows 10 мы не можем самостоятельно устанавливать библиотеки на переносной python, вместо этого мы получили официальный пакет Python 3 с предустановленными библиотеками. Ранее я использовал «Cx_oracle» для запроса к базе данных, но это больше невозможно. Я покопался и нашел предустановленную библиотеку «подпроцессов», и мне удалось запросить данные, но у меня возникла проблема с форматированием извлеченных данных.

Итак, мой код в настоящее время выглядит так:

import csv
from subprocess import Popen, PIPE

def runSqlQuery(sqlCommand, connectString):
   session = Popen(['sqlplus', '-S', connectString], stdin=PIPE, stdout=PIPE, stderr=PIPE)
   session.stdin.write(sqlCommand)
  (stdout, stderr) = session.communicate()
   return session.communicate()

connectString = 'USER/PASS@SERVER'
sqlCommand = b'select * from fidspec where rownum<=3;'
queryResult, errorMessage = runSqlQuery(sqlCommand, connectString)

with open("PATH/test.csv", "w",newline='') as csv_file:
        writer = csv.writer(csv_file, delimiter=',')
        for line in queryResult.strip().splitlines():
            writer.writerow(line.decode())
            print(line.decode())

Который производит следующий вывод:

F, I, D, S, Р, Е, С, , С, О -, -, -, -, -, -, -, -, -, - F, I, D, S, P, E, C, , N, A, M, E -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, - F - 1,0,0 I, N, S, U, R, A, N, C, E, M, U, T, U, A, L,, G, R, P D

1,3,9 H, E, A, L, T, H, C, A, R, E,, M, U, T, U, A, L D

F, I, D, S, Р, Е, С, , С, О -, -, -, -, -, -, -, -, -, - F, I, D, S, P, E, C, , N, A, M, E -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -, -

F

1,2,2 л, I, F, E,, C, O, M, P, A, N, Y D

Как я могу получить данные в классическом формате CSV со строками и столбцами, как показано ниже?

FIDSPEC_CODE | FIDSPEC_NAME | FIDSPEC_STAT

100 | СТРАХОВАЯ ВЗАИМНАЯ ВРП | D

139 | ЗДРАВООХРАНЕНИЕ ВЗАИМНОЕ | D

122 | ЖИЗНЬ КОМПАНИИ | D

Я хотел бы преобразовать его в csv, чтобы я мог использовать его с библиотекой "pandas". Заранее спасибо. BR

...