Hi Michael,
I spoke with the developer of the application that launches the plugins I
am writing and each
python script is run by starting an entirely new process with
the interpreter and each plugin.

It should be a clean environment. From the plugins, I simply import which
ever tables from
the module below that I would need.

In the event I am doing something wrong, my code looks like:

from os import path
from sqlalchemy import (
    Column, CheckConstraint, DDL, ForeignKey, Index, Integer, String,
    create_engine, event
)
from sqlalchemy.engine import Engine
from sqlalchemy.ext.declarative import declared_attr, declarative_base
from sqlalchemy.orm import sessionmaker


db_name = path.join('path', 'config', 'sqlite.db')
engine = create_engine('sqlite:///{}'.format(db_name), echo=False)
Session = sessionmaker(bind=engine, autoflush=False, autocommit=False)
Base = declarative_base()


@event.listens_for(Engine, 'connect')
def set_sqlite_pragma(dbapi_connection, connection_record):
    cursor = dbapi_connection.cursor()
    cursor.execute('PRAGMA foreign_keys=ON')
    cursor.close()


table defs...


if __name__ == '__main__':
    Base.metadata.create_all(engine)


Thanks so much for the help,
jlc


On Sun, Oct 20, 2013 at 11:01 PM, Michael Bayer <mike...@zzzcomputing.com>wrote:

> the MetaData object holds one Table object per unique name given.   If you
> use the Table constructor more than once with the same name and the same
> MetaData, you get this error.
>
> That's how the error is caused, then the fact that the error is
> "occasional" points strongly to a race condition of some kind, more than
> one thread both calling the constructor for Table with the same name.
> Patterns that could cause this could be some kind of unsynchronized global
> registry or singleton object that when called produces a new Table object.
>
> The recommended pattern is for Table objects (as well as mapped classes)
> to generally be declared at the module level so that these names are
> produced only at module import time, which itself should occur before the
> application starts any threads in addition to the main application thread.
>
>
>
>
> On Oct 20, 2013, at 11:04 PM, Joseph Casale <jcas...@gmail.com> wrote:
>
> I have a module that is imported by several Python scripts run by an
> application
> that fires up a new interpreter session for each invocation. When not
> under load or
> running the code manually at the cli things work fine but once the
> concurrency
> raises and the application starts seeing some load it emits
> InvalidRequestError
> exceptions on one table.
>
> After searching I am not sure the results relate to my issue or maybe my
> lack
> of familiarity with SQLAlchemy has the better of me.
>
> Any guidance would be greatly appreciated,
> jlc
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to