Damn, your're right! Mea culpa :P Thanks! Now it's working again
On Thu, Mar 18, 2010 at 6:27 PM, Michael Bayer <mike...@zzzcomputing.com>wrote: > masetto wrote: > > Hi all, > > > > i am new to SQLAlchemy (simply wonderful!), and i'm writing some > > python scripts to do some experiment. > > > > I've written a SINGLE python module with two classes which define two > > different tables (declarative_base) with a simple relationship and a > > single Foreign Key and everything WORKS fine as expected. Cool! :P > > > > Then, i've moved that two classes in two different python modules to > > better organize my code but now i got the following error: > > sqlalchemy.exc.NoReferencedTableError: Could not find table 'metadata' > > with which to generate a foreign key > > > > I understood the error message but i can't found a way to resolve this > > issue, can you help me? > > > > This is my "directory layout":' > > > you need to share one declarative "Base" class for all of the classes that > are related to each other, or alternatively at least a single "MetaData" > for all tables that wish to reference foreign keys using strings. > Anytime you specify options using strings to find something else, the > relevant "base" has to be shared, i.e. declarative base if using strings > in "relation()", and MetaData if using strings in ForeignKey(). > > > > > > > > > > > test.py - the main python module > > SQLTableBuilder_Definition.py - class that define a table called > > "Definition" > > SQLTableBuilder_Metadata.py - class that define a table called > > "Metadata" > > > > test.py: > > ... > > engine = create_engine('sqlite:///test.db3', echo=True, > > encoding='utf-8' ) > > > > import SQLTableBuilder_Metadata > > > > metadata_table = SQLTableBuilder_Metadata.MetadataClass.__table__ > > metadata = SQLTableBuilder_Metadata.Base.metadata > > metadata.create_all(engine) > > > > import SQLTableBuilder_Definition > > definitions_table = > > SQLTableBuilder_Definition.DefinitionClass.__table__ > > metadata = SQLTableBuilder_Definition.Base.metadata > > metadata.create_all(engine) <== My script explode here with the > > following: > > > > Traceback (most recent call last): > > File "test.py", line 82, in <module> > > metadata.create_all(engine) > > ... > > sqlalchemy.exc.NoReferencedTableError: Could not find table > > 'metadata' with which to generate a foreign key > > > > > > Session = sessionmaker(bind=engine) > > Session.configure(bind=engine) > > session = Session() > > > > ... > > session.add(myObj) > > ... > > > > SQLTableBuilder_Definition.py: > > > > Base = declarative_base() > > > > class DefinitionClass(Base): > > __tablename__ = 'definitions' > > > > defId = Column(Integer, primary_key=True) > > Id = Column(String) > > classType = Column(String) > > version = Column(String) > > > > metadataId = Column('metadataId', Integer, > > ForeignKey('metadata.metadataId')) > > > > def __init__(self, node): > > self.Id = node.get("id")[len(IdName):] > > self.version = node.get("version") > > self.classType = node.get("class") > > > > SQLTableBuilder_Metadata.py: > > import SQLTableBuilder_Definition > > > > Base = declarative_base() > > > > class MetadataClass(Base): > > __tablename__ = 'metadata' > > > > metadataId = Column(Integer, primary_key=True) > > title = Column(String) > > > > defRef = relation(SQLTableBuilder_Definition.DefinitionClass, > > backref="metadata") > > > > def __init__(self, node): > > self.title = node > > > > If i remove relation and foreign key from the two classes, everything > > works fine again. > > I suppose that python can't find the metadata table (previously > > created without error) from SQLTableBuilder_Definition.py, but how i > > can "point him" in the right direction? > > > > Thanks for your attention. > > > > ps. > >>>> print sqlalchemy.__version__ > > 0.6beta1 > > > > -- > > You received this message because you are subscribed to the Google Groups > > "sqlalchemy" group. > > To post to this group, send email to sqlalch...@googlegroups.com. > > To unsubscribe from this group, send email to > > sqlalchemy+unsubscr...@googlegroups.com<sqlalchemy%2bunsubscr...@googlegroups.com> > . > > For more options, visit this group at > > http://groups.google.com/group/sqlalchemy?hl=en. > > > > > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com<sqlalchemy%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.