Subject | Re: [firebird-python] Re: FDB release 0.7.2 is out |
---|---|
Author | Pavel Cisar |
Post date | 2012-04-06T07:06:10Z |
Hi,
Dne 6.4.2012 07:26, nxciro napsal(a):
the statement. KInterbasDB doesn't show this behavior because it opens
main transaction immediately, which is not good practice, so we didn't
replicate it. Because Python DB API 2.0 doesn't specify when transaction
has to be implicitly started, FDB with its deferred start is in full
compliance with specification. If you want generic code that always
commits before SQL execution to start a new implicit transaction, check
the connection.main_transaction.closed before call to commit().
best regards
Pavel Cisar
IBPhoenix
Dne 6.4.2012 07:26, nxciro napsal(a):
>FDB expects active transaction, which is not active until you execute
> dsn2='localhost:/data5/dbmaster/TEST.FDB'
> testcon1=fdb.connect(dsn=dsn2,user='sysdba',password=apassword)
> cur=testcon1.cursor()
> testcon1.commit()
>
>
> File "/usr/local/lib/python2.7/site-packages/fdb-0.7.2-py2.7.egg/fdb/fbcore.py", line 1046, in commit
> self._main_transaction.commit(retaining)
> File "/usr/local/lib/python2.7/site-packages/fdb-0.7.2-py2.7.egg/fdb/fbcore.py", line 2146, in commit
> self.__check_active()
> File "/usr/local/lib/python2.7/site-packages/fdb-0.7.2-py2.7.egg/fdb/fbcore.py", line 2077, in __check_active
> raise ProgrammingError("Transaction object is not active")
> fdb.fbcore.ProgrammingError: Transaction object is not active
>
>
> The line testcon1.commit() throws this error
> this does not happen in kinterbasdb.
> FDB seems to expect an executed cursor prior to any commit()
the statement. KInterbasDB doesn't show this behavior because it opens
main transaction immediately, which is not good practice, so we didn't
replicate it. Because Python DB API 2.0 doesn't specify when transaction
has to be implicitly started, FDB with its deferred start is in full
compliance with specification. If you want generic code that always
commits before SQL execution to start a new implicit transaction, check
the connection.main_transaction.closed before call to commit().
best regards
Pavel Cisar
IBPhoenix