Вот ночью пробовал:
def qry(self, id=None):
res = Session.execute("SELECT OUT_NUNITCODE FROM PR_ASSIGN_NUNITCODE(?)", (id))
for row in res:
print id
print row.out_nunitcode
return u'сработало'
Если в id передать 1995, то процедура должна вернуть 9 (там уже 8 филиалов есть на договоре 1995)
Только вся эта конструкция выдает
⇝ AttributeError: 'list' object has no attribute 'keys'
View as: Interactive (full) | Text (full) | XML (full)
clear this
clear this
Module pyfield.controllers.contracts:201 in qry view
<< #----------------------------------------------------------------------
def qry(self, id=None):
res = Session.execute("SELECT OUT_NUNITCODE FROM PR_ASSIGN_NUNITCODE(?)", (id))
print id
#for row in res:
>> res = Session.execute("SELECT OUT_NUNITCODE FROM PR_ASSIGN_NUNITCODE(?)", (id))
Module sqlalchemy.orm.scoping:121 in do view
<< def instrument(name):
def do(self, *args, **kwargs):
return getattr(self.registry(), name)(*args, **kwargs)
return do
for meth in Session.public_methods:
>> return getattr(self.registry(), name)(*args, **kwargs)
Module sqlalchemy.orm.session:755 in execute view
<< return self.__connection(engine, close_with_result=True).execute(
clause, params or {})
def scalar(self, clause, params=None, mapper=None):
>> clause, params or {})
Module sqlalchemy.engine.base:824 in execute view
<< for c in type(object).__mro__:
if c in Connection.executors:
return Connection.executors[c](self, object, multiparams, params)
else:
raise exc.InvalidRequestError("Unexecutable object type: " + str(type(object)))
>> return Connection.executors[c](self, object, multiparams, params)
Module sqlalchemy.engine.base:866 in _execute_clauseelement view
<< params = self.__distill_params(multiparams, params)
if params:
keys = params[0].keys()
else:
keys = []
>> keys = params[0].keys()
AttributeError: 'list' object has no attribute 'keys'
По идее, там в доке по SA 5 есть пара слов про outparam - типа используется в stored procedure
И на этом все заканчивается. Надо ли отражать ее в модели, не надо ли… Как ее указывать? Как таблицу или для процедур свои примочки? Или можно употребить только при помощи литерального SQL…
Собсно, FireBird стыкуется с SA через kinterbasdb - прослойка, драйвер.
В Кинтербазе сказано, что использовать ХП надо так:
##To retrieve a result set from a stored procedure with KInterbasDB, use code such as this:
cur.execute("select output1, output2 from the_proc(?, ?)", (input1, input2))
# Ordinary fetch code here, such as:
for row in cur:
... # process row
con.commit() # If the procedure had any side effects, commit them.
Cur - курсор. Очевидно, это и есть Session. Между прочим, в доке к SA session с маленькой буквы. А, как я понял - session это вовсе не то же, что и Session