Hi Simon, (I do things a little different on the import side) Working example (very minimised):
from sqlalchemy import Integer,Column,DateTime,Unicode,UnicodeText,Boolean,ForeignKey,Interval from sqlalchemy.ext.declarative import declarative_base import sqlalchemy.orm as orm Base = declarative_base() class Event(Base): __tablename__ = "CalendarEvents" Id = Column(Integer, primary_key=True) CalendarId = Column(ForeignKey('Calendars.Id')) class Calendar(Base): __tablename__ = "Calendars" Id = Column(Integer, primary_key=True) UserId = Column(Integer, index=True) ProdId = Column(Unicode(255)) Version = Column(Unicode(5)) CalScale = Column(Unicode(20)) Method = Column(Unicode(10)) Events = orm.relation(Event,backref='Calendar')#, cascade="all") if __name__ == '__main__': engine = create_engine('sqlite:///') Base.metadata.create_all(bind=engine) Session = orm.sessionmaker(bind=engine)() cal = Calendar() when I run this I get: Traceback (most recent call last): File "/var/www/PyWebOs/caltst.py", line 28, in <module> cal = Calendar() File "<string>", line 4, in __init__ File "/usr/local/lib/python2.6/site-packages/sqlalchemy/orm/ state.py", line 71, in initialize_instance fn(self, instance, args, kwargs) File "/usr/local/lib/python2.6/site-packages/sqlalchemy/orm/ mapper.py", line 1810, in _event_on_init instrumenting_mapper.compile() File "/usr/local/lib/python2.6/site-packages/sqlalchemy/orm/ mapper.py", line 666, in compile "Message was: %s" % mapper._compile_failed) InvalidRequestError: One or more mappers failed to compile. Exception was probably suppressed within a hasattr() call. Message was: One or more mappers failed to compile. Exception was probably suppressed within a hasattr() call. Message was: One or more mappers failed to compile. Exception was probably suppressed within a hasattr() call. Message was: Could not find table 'Calendar' with which to generate a foreign key which is excacly the same as I got..... I have done so mutch in python/sqlalchemy that I feel extremely stupid not to get this working, it might be just a case of "overreading" the problem Martijn On Oct 15, 2009, at 4:10 PM, King Simon-NFHD78 wrote: > >> -----Original Message----- >> From: sqlalchemy@googlegroups.com >> [mailto:sqlalch...@googlegroups.com] On Behalf Of Martijn Moeling >> Sent: 15 October 2009 14:42 >> To: sqlalchemy@googlegroups.com >> Subject: [sqlalchemy] Declerative Relation trouble >> >> Hi All, >> >> >> I am having a very bad day (or two to be honest), spending >> time reading error messages. >> >> >> I am sorry to say but the SQLALCHEMY documentation is not very >> helpful >> when using declarative_base.... when it is about relations...... >> > > Without a runnable example which actually shows your problem, it's > very > difficult to debug. Here's something I cobbled together based on your > description. It may not be exactly right, but it seems to work: > > > import sqlalchemy as sa > import sqlalchemy.orm as orm > from sqlalchemy.ext.declarative import declarative_base > > Base = declarative_base() > > class XProp(Base): > __tablename__ = "CalendarXProps" > Id = sa.Column(sa.Integer, primary_key=True) > EventId = sa.Column(sa.ForeignKey('CalendarEvents.Id')) > AlarmId = sa.Column(sa.ForeignKey('CalendarAlarms.Id')) > CalendarId = sa.Column(sa.ForeignKey('Calendars.Id')) > Name = sa.Column(sa.String(20)) > Value = sa.Column(sa.String(20)) > > class Event(Base): > __tablename__ = "CalendarEvents" > Id = sa.Column(sa.Integer, primary_key=True) > CalendarId = sa.Column(sa.ForeignKey('Calendars.Id')) > XProps = orm.relation(XProp, backref='Events') > > class Alarm(Base): > __tablename__ = "CalendarAlarms" > Id = sa.Column(sa.Integer, primary_key=True) > CalendarId = sa.Column(sa.ForeignKey('Calendars.Id')) > XProps = orm.relation(XProp, backref='Alarms') > > class Calendar(Base): > __tablename__ = "Calendars" > Id = sa.Column(sa.Integer, primary_key=True) > Events = orm.relation(Event, backref='Calendar') > Alarms = orm.relation(Alarm, backref='Calendar') > XProps = orm.relation(XProp, backref='Calendar') > > if __name__ == '__main__': > engine = sa.create_engine('sqlite:///') > Base.metadata.create_all(bind=engine) > Session = orm.sessionmaker(bind=engine)() > > cal = Calendar() > cal.Events.append(Event(XProps=[XProp(Name='Hello', Value='World'), > XProp(Name='foo', Value='bar')])) > > > Session.add(cal) > Session.flush() > > print cal > for event in cal.Events: > print event > for prop in event.XProps: > print prop > > > > Hope that helps, > > Simon > > > --~--~---------~--~----~------------~-------~--~----~ 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 sqlalchemy+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---