Итак, я запросил данные из базы данных oracle с помощью cursor.execute (). Относительно простой запрос выбора. Это работает.
Но когда я пытаюсь извлечь из него данные, происходит сбой Python.
То же самое происходит для fetchall (), fetchmany () и fetchone ().
Когда запрос сначала прервался в fetchmany (), я решил перебрать fetchone (), и он работал для первых двух строк, а затем прервался в третьей.
Полагаю, это потому, что в третьем ряду слишком много данных.
Итак, есть ли способ обойти эту проблему и извлечь данные?
(Пожалуйста, не обращайте внимания на неправильные отступы, которые невозможно скопировать в моем телефоне)
EDIT:
Я удалил четыре столбца с типом «ROWID». После этого не было никаких проблем. Я легко смог получить 100 строк за один раз.
Таким образом, чтобы подтвердить свое подозрение, я пошел дальше и создал еще одну копию, содержащую только эти столбцы со строками, и она вылетает, как и ожидалось.
Так есть ли проблемы с типом ROWID?
Тестовый стол для того же.
Вставить в TEST_FOR_CX_ORACLE (Z $ OEX0_LINES, Z $ OEX0_ORDER_INVOICES, Z $ OEX0_ORDERS, Z $ ITEM_ROWID) значения ( 'ABoeqvAEyAAB0HOAAM', 'AAAL0DAEzAAClz7AAN', 'AAAVeuABHAAA4vdAAH', 'ABoeo + AIVAAE6dKAAQ');
Вставьте в TEST_FOR_CX_ORACLE (Z $ OEX0_LINES, Z $ OEX0_ORDER_INVOICES, Z $ OEX0_ORDERS, Z $ ITEM_ROWID) значения ('ABoeqvABQAABKo6AAI', 'AAAL0DAEzAAClz7AAAAAAAAAAAAAAAAAAAAHAAHAAAHAAAAAAAAAA)).
Вставьте в TEST_FOR_CX_ORACLE (Z $ OEX0_LINES, Z $ OEX0_ORDER_INVOICES, Z $ OEX0_ORDERS, Z $ ITEM_ROWID) значения ('ABoeqvABQAABKo6AAG', 'AAAL0DAEzAAClz7AAP', 'AAAVAAAAAAAAAAAAAAAAAAAAAA, AAAAAAAAAAA, AAAAAAAAA, AAAAAAAAAA, AAAAAAAAA, AAAAHAAAAA, AAAAAAAA, AAAAAAA, AAAAHAAAAAA, AAAAAAAAA, AAAAAAA, AAAAAAA, AAAAAAAA, AAAAAAAA, AAAAHAAAA, AAAAAAAA, AAAAAAA, AAAAAAA, AAAAAAA, AAAAAAA, AAA)
Вставьте в значения TEST_FOR_CX_ORACLE (Z $ OEX0_LINES, Z $ OEX0_ORDER_INVOICES, Z $ OEX0_ORDERS, Z $ ITEM_ROWID) ('ABoeqvAEyAAB0HOAAK', 'AAAL0DAEzAACl0EAAC', 'AAAVeuAHAAAA +AAAHAAAAAAAAAAAAAAAAAA, UAA), UAA, UAA, UAA, UAA, UAA, UAA, UAA, UAA, UAA, UAA, UAA.
Сценарий:
from cx_Oracle import makedsn,connect,Cursor
from pandas import read_sql_table, DataFrame, Series
from time import time
def create_conn( host_link , port , service_name , user_name , password ):
dsn=makedsn(host_link,port,service_name=service_name)
return connect(user=user_name, password=password, dsn=dsn)
def initiate_connection(conn):
try:
dbconnection = create_conn(*conn)
print('Connected to '+conn[2]+' !')
except Exception as e:
print(e)
dbconnection = None
return dbconnection
def execute_query(query,conn):
dbconnection=initiate_connection(conn)
try:
cursor = dbconnection.cursor()
print ('Cursor Created!')
return cursor.execute(query)
except Exception as e:
print(e)
return None
start_time = time()
query='''SELECT * FROM test_for_cx_oracle'''
try:
cx_read_query = execute_query(query,ecspat_c)
time_after_execute_query = time()
print('Query Executed')
columns = [i[0] for i in cx_read_query.description]
time_after_getting_columns = time()
except Exception as e:
print(e)
print(time_after_execute_query-start_time,time_after_getting_columns-time_after_execute_query)