Hello list, I've been having many stability problems with my first SQLAlchemy + mod_python application. By now I'm thinking it's all my fault and I'm not using these tools the way they are intended to be used. So I would like to know how do others organize their code to get something that works.
I got the following advice from a previous post by Michael Bayer: > mappers are intended to be create-once-per-class objects (usually at > the module level), whereas sessions are usually instantiated > once-per-request, queries once-per-operation What I do is to create an engine in a separate module that is imported at the beginning of my app. This module, which I call dbinit.py, resembles this: db = sa.create_engine('mysql://user:[EMAIL PROTECTED]/mydb', use_threadlocal=True, echo_pool=True) metadata = sa.BoundMetaData(db) users_table = sa.Table('Users', metadata, autoload=True) class User(object): pass sa.orm.clear_mappers() sa.mapper(User, users_table) That's it. I import it once at the beginning of the app and just assume SQLALchemy keeps a pool of connections for me and whenever I use the db variable to create sessions it'll be available and do the right thing. I don't use any connect/disconnect methods or anything like that. In fact a typical method in my mod_python site looks just like this: import logging import sqlalchemy as sa from dbinit import * def justatest(req): dbsession = sa.create_session(bind_to=db) query = dbsession.query(User) requested_uid = sanitize(req.form['uid']) try: user = query.get_by(Uid=requested_uid) except sa.exceptions.SQLError, details: logging.debug("got this error: %s" % details) dbsession.close() return "Yet another crash" else: dbsession.close() return show_message(req, "Looks good") I have many methods that follow that same structure. And the whole thing works rather well while I'm the only one using it... but in the real world I get InterfaceError exceptions all the time, which others in this list identified as threading issues. Michael Bayer also added that I should... > ensure that you arent sharing connections or sessions between concurrently > executing threads. I believe my code above is free from these errors... Right? I leave SQLAlchemy the task of handling connections and I create and close sessions with each http request. So that's it. I don't know if my app uses a weird structure that brings SQLAlchemy to its knees and I should be doing something else. How do you people organize your code in a simple mod_python + SQLAlchemy application? Is my code just plain odd? Any particular hints? Does anyone know of a solid open source mod_python + SQLALchemy application I could use as an example? Best regards, --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---