Python pyodb c и Oracle SQL Ошибка неверного номера - PullRequest
1 голос
/ 03 февраля 2020

Я подключаюсь к базе данных Oracle через pyodb c и последовательно получаю ORA-01722. В любом случае я могу прочитать данные в виде символов или что-то еще, чтобы обработать их в Python? У меня есть доступ только для чтения к этим данным, и я не могу найти решение, чтобы избежать ошибки. Вот код и ошибки, которые я получаю.

import pyodbc
con = pyodbc.connect('myconnectionstring')
data_cursor = 'SELECT * FROM my_table'

DataError: ('22018', '[22018] [Oracle][ODBC][Ora]ORA-01722: Ungültige Zahl\n\x00\u07fe\x00\x00\x00\x00\x00뿗耄
\x01\x00\x03\x00\x00\x00껐1\x00\x00\x00\x00\x00\x00櫈߯
\x00\x00H\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 (1722) (SQLExecDirectW)')

Устранение неполадок в этой таблице. У меня есть 8 столбцов со следующими характеристиками:

q = "SELECT column_name, data_type FROM USER_TAB_COLUMNS WHERE table_name = 'my_table'"
td = con.execute(q)
cols = np.vstack([i for i in td])
cols

array([['A', 'VARCHAR2'],
       ['B', 'VARCHAR2'],
       ['C', 'NUMBER'],
       ['D', 'NUMBER'],
       ['E', 'NUMBER'],
       ['F', 'NUMBER'],
       ['G', 'NUMBER'],
       ['H', 'VARCHAR2']], dtype='<U11')

Ошибки происходят из столбцов B, D, E и F, поэтому я попытался прочитать их по отдельности, используя TO_CHAR, но безуспешно.

def get_tab_col(table_name, col_name):
    q = "SELECT TO_CHAR({}) FROM {}".format(col_name, table_name)
    return con.execute(q)

data = {}
for c in cols[:, 0]:
    try:
        x = get_tab_col(table_name, c)
        data[c] = np.vstack([i for i in x])
    except Exception as e:
        print('{} fails'.format(c))

B fails
D fails
E fails
F fails

Я не уверен, что это проблема языка в системе или что-то еще. Я вижу китайские (?) Символы во всех строках ошибок, но мой компьютер (ОС: Windows 7 Enterprise) работает на немецком языке.

Любая помощь для чтения этой базы данных будет принята с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...