Я подключаюсь к базе данных 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) работает на немецком языке.
Любая помощь для чтения этой базы данных будет принята с благодарностью!