Guys, I can really use some help here. Can some one tell me why I am unable to do such a simple thing.
Thanks, Gaurav On Wed, May 2, 2012 at 9:38 AM, Gaurav Gupta <[email protected]> wrote: > Guys, > > I need help in figuring out some quirks in Elixir. I have a very simple > schema (schema.py) with a simple ForeignKey relationship and a python > module (model.py), where I create 2 databases from the same schema (see the > code below). When I run model.py, I get the following error when it tries > to create the second database: > *Exception: 'Table2' resolves to several entities, you should use the > full path (including the full module name) to that entity.* > > I am unsure why this error happens. It appears that the two database are > sharing some state. What am I missing? > > *schema.py:* > > import elixir > from elixir import Field, Unicode > from elixir import ManyToOne > > class Table1(elixir.Entity): > # Disable the default global elixir.session. > elixir.using_options(tablename='Table1', session=None) > > column1 = Field(Unicode, primary_key=True) > column2 = Field(Unicode, primary_key=True) > > t2 = ManyToOne('Table2', field=column2, > ondelete='cascade', onupdate='cascade') > > class Table2(elixir.Entity): > # Disable the default global elixir.session. > elixir.using_options(tablename='Table2', session=None) > > column2 = Field(Unicode, primary_key=True) > > *model.py:* > > import sys > import elixir > import sqlalchemy, sqlalchemy.schema > from sqlalchemy.orm import scoped_session, sessionmaker > > def import_schema(schema_module_string): > if schema_module_string in sys.modules: > # > # If the module is already imported, we reload it again. > # This is needed if we want to use same schema module for multiple > # databases, otherwise no tables are creates by setup_all() > # > reload(sys.modules[schema_module_string]) > else: > # If the schema module is not imported, import it dynamically. > __import__(schema_module_string) > > def create_model(database): > metadata = sqlalchemy.schema.ThreadLocalMetaData() > elixir.metadata = metadata > import_schema('schema') > elixir.setup_all() > engine = sqlalchemy.create_engine(database, echo='debug') > Session = scoped_session(sessionmaker(autoflush=True, bind=engine)) > session = Session() > metadata.create_all(bind=engine) > session.commit() > > def _main(argv=None): > create_model("sqlite:///foo") > > # This is where the error happens > create_model("sqlite:///bar") > > if __name__ == "__main__": > _main() > > -- You received this message because you are subscribed to the Google Groups "SQLElixir" group. 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/sqlelixir?hl=en.
