Для тех кто хочет основательно изучить все возможности, предоставляемые данным модулем, есть подробная документация по модулю (на английском языке), здесь же я буду приводить лишь некоторые моменты, достаточные для краткого знакомства с модулем.
Во-первых, скачиваем сам модуль kinterbasdb, и не забываем каждый раз в программе делать импорт:
import kinterbasdb
Получение набора записей путем выполнения sql-запроса
#подключаем модуль
import kinterbasdb
#Подключаемся к базе
myconnection = kinterbasdb.connect(ibhostname,ibdatabasename, ibusername, ibpassword)
#Cоздаем курсор
mycursor = myconnection.cursor()
# выполяем sql-запрос
mycursor.execute('select tt.field1, tt.field2, tt.filed3 from mytable tt')
# парсим полученный результат в список кортежей
result = mycursor.fetchall()
# бежим по записям и выполняем любые действия
for (myfield1, myfield2, myfield3) in result:
#выводим на экран значения полей
print field1+'|'+ field2 + '|' + field3
# после выполнения всех нужных нам действий закрываем соединение с базой
myconnection.close
Вызов хранимых процедур
1.Получение и обработка набора записей, полученного в результате выполнения хранимой процедуры:
#посредством выполнения sql-запроса вызываем процедуру, имеющуюся в базе
cur.execute("select outvalue1, outvalue2 from mystoredproc(?, ?)", (inputparam1, inputparam2))
# бежим по полученным записям:
for row in cur:
... # обрабатываем запись
con.commit() # Если процедура требует подтверждения транзакции, подтверждаем
2.Выполнение хранимой процедуры для последующего использования возвращаемых ею параметров (output parameters):
#напрямую вызываем процедуру, имеющуюся в базе
cur.callproc("the_proc", (input1, input2))
# Если процедура возвращает какие-либо параметры, получаем
# их как если это была бы первая запись набора данных
outputParams = cur.fetchone()
На всякий случай напомню, что после выполнения fetchone() переменная outputParams у нас содержит не что иное, как список значений, полученных в результате выполнения процедуры. Таким образом мы можем воспользоваться любым из этих значений, обратившись к нему по его индексу. Например, процедура вернула значения outvalue1 и outvalue2, соответственно получили outputParams = (outvalue1, outvalue2). Если нам нужно только значение outvalue1 вызываем его из списка:
print outputParams[0]
con.commit() # Если процедура требует подтверждения транзакции, подтверждаем
Примечание:
В официальной документации к модулю kinterbasdb написано передавать входные параметры в виде кортежа (param1, param2),
вот так:
cur.execute("select outvalue1, outvalue2 from mystoredproc(?, ?)", (inputparam1, inputparam2))
,однако если таким образом укажете единственный параметр, то получите ошибку:
TypeError: object of type 'int' has no len()
Потому, как при вызове процедур с единственным входным параметром этот параметр следует указывать в виде [param1], вот так:
cur.execute("select outvalue1, outvalue2 from mystoredproc(?, ?)", [inputparam1])
В случае, когда входных параметров несколько, вызов процедур прекрасно работал как в случае указания параметров в виде списка, так и в виде кортежа:
cur.execute("select outvalue1, outvalue2 from mystoredproc(?, ?)", [inputparam1, inputparam2])
cur.execute("select outvalue1, outvalue2 from mystoredproc(?, ?)", (inputparam1, inputparam2))
.. ПРОДОЛЖЕНИЕ СЛЕДУЕТ
1 комментарий:
продолжения так и не последовало
Отправить комментарий