Я работаю.
DB2 V7R3
PYTHON 3,8.
Я пытаюсь подключиться к базе данных DB2 без проблем.
Я использую Pyodbc
ДРАЙВЕР: Iseries ACCESS ODB C ДРАЙВЕР --- - ODB C: 32-битный
Я даже использую CCSID для правильного кодирования, я получаю на 4 секунды больше с указанным CCSID, чем без.
Соединение быстрое, и даже очень быстро получается столбец cursor.description
.
Но когда я подхожу к fetchall () для строк, где замедляются ветки, он получает 1000 строк за 5,431816339492798 секунд на один столбец. В клиенте это занимает 0,5 секунды. Если развернуть результат до моего актуального запроса, потребуется 6000 секунд для 6000 строк в 5 столбцах.
Я проверил время нахождения над строками с помощью fetchmany () и получил 95 секунд для моего фактического запроса. Мой актуальный запрос занимает 1,5 секунды для чтения в клиенте.
Вот мой код:
import pyodbc
import time
def connect_odbc():
start_time = time.time()
list_row = []
connection = pyodbc.connect(DRIVER='iSeries Access ODBC Driver',
SYSTEM='SYSTEM',
DNS='DNS,
userid='user',
pwd='pass',
CCSID = 'My_Value'
)
cursor = connection.cursor().execute("select columns from table where column = value limit 1000"
columns = [column[0] for column in cursor.description]
for r in cursor.fetchall():
pass
print("--- %s seconds ---" % (time.time() - start_time))
connect_odbc()
OUTPUT = --- 5.431816339492798 секунд ---
Я знаю, что этот вопрос был задан, но я искал по inte rnet и пробовал сервалы, но безрезультатно.
Какая модификация в конфигурации ODB C могла бы сделать это быстрее?
Есть ли у них какой-либо вариант, кроме fetchall()
? на мой взгляд, кажется, что fetchall()
все замедляет.
любая помощь будет оценена