I have committed a new version of TLEngine which handles transaction
context in the same way as that of SQLEngine in version 0.1, and
added new unit tests that test the threadlocal and nesting behavior
of this engine. the "commit()/rollback()" methods directly off the
engine were not working before. now its working much better. recall
that TLEngine is a subclass of ComposedSQLEngine and is only
activated when you use the "strategy='threadlocal'" argument with
create_engine().
I am almost definitely going to put out another release tonight, but
it would be great if one or both of you could give changeset 1537 a
try, with create_engine('foo', strategy='threadlocal') and see if you
get better results...would be great to get it totally right before
the release.
On May 28, 2006, at 7:24 AM, Valentino Volonghi aka Dialtone wrote:
On Sat, 27 May 2006 20:36:56 -0400, Michael Bayer
<[EMAIL PROTECTED]> wrote:
sure, right here:
http://www.sqlalchemy.org/docs/
dbengine.myt#dbengine_connections_context
just switch on 'create_engine('foo', strategy="threadlocal")' and
youve got identical 0.1 behavior.
Not really since I tried that and it deadlocks inside postgres
because of idle transactions.
def _transact(engine):
"""
return an high level function bind to a particulary
sqlalchemy engine
this function is suitable to use as a decorator
a decorated function returns a Deferred while its body
is running in a separate thread
"""
def _transaction(f):
# _transaction *is* the decorator
def _wrap(*args, **kwargs):
def _1():
conn = engine.contextual_connect()
trans = conn.begin()
try:
r = f(*args, **kwargs)
except:
trans.rollback()
conn.close()
raise
else:
trans.commit()
conn.close()
return r
return threads.deferToThread(_1)
_wrap.__name__ = f.__name__
return _wrap
return _transaction
I thought this would work in threadlocal mode but it doesn't.
Not only that but:
def getconn():
... return psycopg2.connect(database='blabla2',
user='blalbla1', password='blabla')
p = sq.pool.QueuePool(getconn, pool_size=20, max_overflow=40)
sq.create_engine('postgres', pool=p, convert_unicode=True)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/Volumes/dati/Sviluppo/sqlalchemy/lib/sqlalchemy/engine/
__init__.py", line 92, in create_engine
return strategy.create(*args, **kwargs)
File "/Volumes/dati/Sviluppo/sqlalchemy/lib/sqlalchemy/engine/
strategies.py", line 30, in create
module = u.get_module()
AttributeError: 'NoneType' object has no attribute 'get_module'
Seems to be caused by the regexp in url.make_url()
Using 'postgres:///' in create_engine causes...
e.connect()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/Volumes/dati/Sviluppo/sqlalchemy/lib/sqlalchemy/engine/
base.py", line 450, in connect
return Connection(self, **kwargs)
File "/Volumes/dati/Sviluppo/sqlalchemy/lib/sqlalchemy/engine/
base.py", line 177, in __init__
self.__connection = connection or engine.raw_connection()
File "/Volumes/dati/Sviluppo/sqlalchemy/lib/sqlalchemy/engine/
base.py", line 473, in raw_connection
return self.connection_provider.get_connection()
File "/Volumes/dati/Sviluppo/sqlalchemy/lib/sqlalchemy/engine/
default.py", line 34, in get_connection
return self._pool.connect()
File "/Volumes/dati/Sviluppo/sqlalchemy/lib/sqlalchemy/pool.py",
line 84, in connect
return ConnectionFairy(self).checkout()
File "/Volumes/dati/Sviluppo/sqlalchemy/lib/sqlalchemy/pool.py",
line 130, in __init__
self.connection = pool.get()
File "/Volumes/dati/Sviluppo/sqlalchemy/lib/sqlalchemy/pool.py",
line 102, in get
return self.do_get()
File "/Volumes/dati/Sviluppo/sqlalchemy/lib/sqlalchemy/pool.py",
line 227, in do_get
return self._creator()
File "/Volumes/dati/Sviluppo/sqlalchemy/lib/sqlalchemy/engine/
default.py", line 27, in <lambda>
self._pool = poolclass(lambda: dbapi.connect(*cargs, **cparams),
**kwargs)
psycopg2.OperationalError: FATAL: database "host=" does not exist
To close up, don't take this personally please because sqlalchemy
is anyway wonderful, but as things are currently going with 0.1--
>0.2 migration the pain in the butt is sqlalchemy and not twisted.
-------------------------------------------------------
All the advantages of Linux Managed Hosting--Without the Cost and Risk!
Fully trained technicians. The highest number of Red Hat certifications in
the hosting industry. Fanatical Support. Click to learn more
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users