0.6 - unexpected keyword argument 'transactional'

639 views
Skip to first unread message

mando

unread,
Dec 14, 2009, 12:47:11 PM12/14/09
to sqlalchemy
Hi!

I'm trying to pass from sqlalchemy 0.5 to 0.6, but I found some
trouble.

This code, that run correctly with 0.5:


def query(self, n):
class_name = n
#engine = self.connection()
Session = sessionmaker(bind=self.engine, autoflush=True,
transactional=True)
session = Session()
query = session.query(class_name)
return query.all()

return me this error:


.....
.......

File "/Users/mac/.qgis//python/plugins/pyarchinitus/modules/db/
pyarchinit_db_manager.py", line 92, in query
session = Session()
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/
python2.6/site-packages/sqlalchemy/orm/session.py", line 180, in
__init__
super(Sess, self).__init__(**local_kwargs)
TypeError: __init__() got an unexpected keyword argument
'transactional'

def query(self, n):
class_name = n
#engine = self.connection()
Session = sessionmaker(bind=self.engine, autoflush=True,
transactional=True)
session = Session()
query = session.query(class_name)
return query.all()

It's a change between 0.5 and 0.6? What part of the changelog I must
to read?

Thanks a lot

Michael Bayer

unread,
Dec 14, 2009, 12:50:37 PM12/14/09
to sqlal...@googlegroups.com
the first thing would be to look at the warnings your 0.5 app generates:

>>> from sqlalchemy.orm import *
>>> s = sessionmaker(transactional=True)()
__main__:1: SADeprecationWarning: The 'transactional' argument to
sessionmaker() is deprecated; use autocommit=True|False instead.
>>>

next we have a list of ORM elements removed in 0.6. 'transactional' is
first in the list:
http://www.sqlalchemy.org/trac/wiki/06Migration#DeprecatedRemovedORMElements




>
> Thanks a lot
>
> --
>
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to sqlal...@googlegroups.com.
> To unsubscribe from this group, send email to
> sqlalchemy+...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
>
>
>

Bala from Boston

unread,
Aug 23, 2012, 2:17:43 PM8/23/12
to sqlal...@googlegroups.com, mik...@zzzcomputing.com
Sorry to bring back a dead thread, but assume others like myself may stumble here for help with this issue.

I added a hack to make sqlalchemy backwards with regards to the transactional keyword and thought it may be useful for future releases. While upgrading a project to avoid deprecated calls is ideal, my personal case involved porting an unfamiliar codebase to a new platform, with library dependencies that used the old methologies which couldn't be upgraded easily. The following code may be added to the beginning of the __init__ method in the Sess class which resides in lib/sqlalchemy/orm/session.py:
            """ Allows sqlalchemy be backwards compatible wrt 'transactional' keyword.
            Removes transactional and sets autocommit based on documentation at 
            """
            if ('transactional' in kwargs):
                if (not('autocommit' in kwargs)): #overwrite if not already set
                    kwargs['autocommit'] = not (kwargs['transactional'])
                del kwargs['transactional']

Apologies in advance if this topic has already been vetted and I missed it, or for any inefficiencies with my code, as I only started looking at SQLAlchemy (and Python for that matter) yesterday. Please feel free to modify and distribute as you see fit.

Cheers,
Bala
Reply all
Reply to author
Forward
0 new messages