El martes, 25 de septiembre de 2012 21:01:39 UTC-3, Karen Tracey escribió:
>
> On Tue, Sep 25, 2012 at 11:24 AM, maxi <[email protected]
> <javascript:>>wrote:
>
>> El martes, 25 de septiembre de 2012 09:05:47 UTC-3, Karen Tracey
>> escribió:
>>
>>> First, this method is used during testing, generally not during normal
>>> operation. It's implemented as a cached property so regardless of how many
>>> times the value is tested the underlying code which creates and drops a
>>> table is only actually called once per database. Is it needed? We need to
>>> know if the database actually supports transactions or if
>>> commit/rollback/etc are simply no-ops. If you know of an alternative way of
>>> determining this, that works across all databases, please share. I added
>>> that code and I've never liked it but I don't know of another way to
>>> accomplish what it needs to do.
>>>
>>>
>> No, I just answer because it caught my attention. Why not just trust in a
>> True/False property ?
>> BTW, What do you mean with "commit/rollback/etc are simply no-ops" ?
>>
>>
> We have no single value we can set for this property for MySQL; whether
> that DB supports transactions is dependent on the configuration of the DB
> server. If the MySQL server is configured to use the MyISAM storage engine,
> then all transaction methods such as commit and rollback simply do nothing
> (are no-ops).
>
>
>> I'm working on django-firebird backend implementation (now using the new
>> firebird python-driver "fdb") and I need reimplement supports_transactions,
>> because I need to commit any work before drop the table, otherwise, I fall
>> into "Object in use" error.
>>
>
> That seems odd. What does "object in use" mean? The routine is currently
> coded to:
>
> 1 - create table
> 2 - commit #1
> 3 - insert row into table
> 4 - rollback #3
> 5 - select count of rows in table
> 6 - read result of #5
> 7 - drop the table
>
> You need to commit before #7? Doesn't seem like that should be necessary.
> Can you elaborate on why Firebird thinks it is necessary?
>
Yes, I need to commit before 7 because the transaction is still active in
that point.
cursor.execute('SELECT COUNT(X) FROM ROLLBACK_TEST')
count, = cursor.fetchone()
self.connection.commit() # <-- I need add this.
cursor.execute('DROP TABLE ROLLBACK_TEST')
self.connection._commit()
cursor.execute start a new transaction, but cursor.fetchone() does not
close it. Then I need a explicit commit, otherwise, drop table will fail
because the table is still in use for the current active transaction.
--
You received this message because you are subscribed to the Google Groups
"Django developers" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/django-developers/-/TSaDbzruc6gJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-developers?hl=en.