Как выполнить сразу несколько запросов?
import cx_Oracle
cx_Oracle.init_oracle_client(lib_dir=r"")
hostname = ''
port =
SID = 'xe'
username = 'demo'
password = 'demo'
dsn_tns = cx_Oracle.makedsn(hostname, port, SID)
try:
conn = cx_Oracle.connect(user=username, password=password, dsn=dsn_tns)
except Exception as err:
print('Exception occured while trying to create a connection', err)
else:
try:
cur = conn.cursor()
sel_1 = """SELECT * FROM ORDERS WHERE STATUS = 'In process' AND CREATOR_ID = 3
AND CREATED_DT = '01-AUG-21' """
sel_2 = """SELECT COUNT(status) FROM orders WHERE status = 'Closed'"""
sel_3 = """SELECT FIO, department_name FROM employees e LEFT JOIN departments d
ON (d.department_id = e.department_id)"""
sel_4 = """SELECT order_id, fio FROM orders o
LEFT JOIN employees e ON(o.creator_id = e.employee_id)"""
cur.executemany(sel_1,sel_2,sel_3,sel_4)
rows = cur.fetchall()
print(rows)
except Exception as err:
print('Excption occured while fetching the records', err)
else:
print('Completed')
finally:
cur.close()
finally:
conn.close()
Выдает ошибку:
Excption occured while fetching the records an integer is required (got type str)
Ответы (2 шт):
Я не сильно шарю в питоне, но в ошибке написано что у вас стринг вместо интежера пытается достаться. Попробуйте составить запрос, в котором будет одинаковое количество столбцов и столбцы тоже одинаковые
Метод cursor.executemany() предназначен для изменения данных (INSERT/UPDARE/DELETE). Идея в том, чтобы запускать один и тот же SQL запрос с разными значениями. Например:
qry = "INSERT INTO table_name (id, name) values(:1, :2)"
records = [(1, "John"), (2, "Jenny"), (3, "Abraham")]
cursor.executemany(qry, records)
В вашем случае, вам надо каждый запрос запускать отдельно и потом использовать cursor.fetchall() для того, чтобы вычитать все записи возвращенные единственным запросом:
cur.execute(sel_1)
for row in cur.fetchall():
# processing row ...
потом обрабатываем следующий запрос:
cur.execute(sel_2)
for row in cur.fetchall():
# processing row ...
и т.д.