Hi All, I have three classes, all using the same declarative_base() instance, as follows:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In a config file: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ global Base Base = None def initBase(): global Base if not Base: Base = declarative_base() return Base ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ First class: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sys.path.append('../config') import config Base = config.initBase() class Member(Base): __tablename__ = 'members' memberID = Column(Integer, primary_key=True) question = Column(String) answer = Column(String) lockoutflag = Column(Boolean) deleteflag = Column(Boolean) firstname = Column(String) lastname = Column(String) middleinitial = Column(String) alert = Column(String) activeflag = Column(Boolean) crmleadID = Column(String) password = Column(String,name='pass') insuranceflag = Column(Boolean) applicationstatusID = Column(Integer) identifier = Column(String) email = Column(String) def __init__(self, member_id, question, answer, lockoutflag, deleteflag, etc.. def __repr__(self): return "<Member('%s','%s',etc ... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Second: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sys.path.append('../config') import config Base = config.initBase() class Gender(Base): __tablename__ = 'member_gender' genderID = Column(Integer, primary_key=True) gender = Column(String,name='description') gender_activeflag = Column(Boolean,name='activeflag') gender_orderindex = Column(Float,name='orderindex') def __init__(self, genderID, description, activeflag, orderindex): self.genderID = genderID self.gender = description self.gender_activeflag = activeflag self.gender_orderindex = orderindex def __repr__(self): return "<Gender('%s','%s','%s','%s')>" % (self.genderID, self.gender, self.activeflag, self.orderindex) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Third Class, using foreign keys and relations into the first two classes: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sys.path.append('../config') import config from Members import * from Gender import * Base = config.initBase() class MemberProfile(Base): __tablename__ = 'member_profiles' memberID = Column(Integer, ForeignKey('members.memberID'), primary_key=True) SSN = Column(String) DOB = Column(Date) industryID = Column(Integer) primarysectorID = Column(Integer) address1 = Column(String) address2 = Column(String) city = Column(String) state = Column(String) zip = Column(String) howhearID = Column(Integer) affiliationID = Column(Integer) incomeID = Column(Integer) worksituationID = Column(Integer) currentinsuranceID = Column(Integer) genderID = Column(Integer,ForeignKey('member_gender.genderID')) referemail = Column(String) occupation = Column(String) phonehome = Column(String) phonework = Column(String) phonecell = Column(String) phonefax = Column(String) occupationID = Column(Integer) occupationother = Column(String) billing_address1 = Column(String) billing_address2 = Column(String) billing_city = Column(String) billing_state = Column(String) billing_zip = Column(String) member = relation(Member,lazy=False,backref=backref ('members',order_by=memberID),cascade="all, delete") gender = relation(Gender,lazy=False,backref=backref ('member_gender'),order_by=genderID) def __init__(self, memberID, SSN=None, etc... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ My unit test is here: Base = config.initBase() metdata = Base.metadata engine = create_engine(config.db_conn) Session = sessionmaker(bind=engine) session = Session() memberProfile = session.query(MemberProfile).filter_by (memberID=81087).first() print "\nOriginal record:" print memberProfile.__dict__ The error I get is here: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ python MemberProfiles.py Traceback (most recent call last): File "MemberProfiles.py", line 108, in ? memberProfile = session.query(MemberProfile).filter_by (memberID=81087).first() File "/usr/lib/python2.4/site-packages/SQLAlchemy-0.5.0rc4-py2.4.egg/ sqlalchemy/orm/query.py", line 1027, in first ret = list(self[0:1]) File "/usr/lib/python2.4/site-packages/SQLAlchemy-0.5.0rc4-py2.4.egg/ sqlalchemy/orm/query.py", line 952, in __getitem__ return list(res) File "/usr/lib/python2.4/site-packages/SQLAlchemy-0.5.0rc4-py2.4.egg/ sqlalchemy/orm/query.py", line 1088, in __iter__ return self._execute_and_instances(context) File "/usr/lib/python2.4/site-packages/SQLAlchemy-0.5.0rc4-py2.4.egg/ sqlalchemy/orm/query.py", line 1091, in _execute_and_instances result = self.session.execute(querycontext.statement, params=self._params, mapper=self._mapper_zero_or_none(), _state=self._refresh_state) File "/usr/lib/python2.4/site-packages/SQLAlchemy-0.5.0rc4-py2.4.egg/ sqlalchemy/orm/session.py", line 749, in execute return self.__connection(engine, close_with_result=True).execute( File "/usr/lib/python2.4/site-packages/SQLAlchemy-0.5.0rc4-py2.4.egg/ sqlalchemy/engine/base.py", line 806, in execute return Connection.executors[c](self, object, multiparams, params) File "/usr/lib/python2.4/site-packages/SQLAlchemy-0.5.0rc4-py2.4.egg/ sqlalchemy/engine/base.py", line 856, in execute_clauseelement return self.__execute_context(context) File "/usr/lib/python2.4/site-packages/SQLAlchemy-0.5.0rc4-py2.4.egg/ sqlalchemy/engine/base.py", line 878, in __execute_context self._cursor_execute(context.cursor, context.statement, context.parameters[0], context=context) File "/usr/lib/python2.4/site-packages/SQLAlchemy-0.5.0rc4-py2.4.egg/ sqlalchemy/engine/base.py", line 927, in _cursor_execute self._handle_dbapi_exception(e, statement, parameters, cursor) File "/usr/lib/python2.4/site-packages/SQLAlchemy-0.5.0rc4-py2.4.egg/ sqlalchemy/engine/base.py", line 909, in _handle_dbapi_exception raise exc.DBAPIError.instance(statement, parameters, e, connection_invalidated=is_disconnect) sqlalchemy.exc.ProgrammingError: (ProgrammingError) missing FROM- clause entry for table "member_profiles" at character 5151 'SELECT anon_1."member_profiles_memberID" AS "anon_1_member_profiles_memberID", anon_1."member_profiles_genderID" AS "anon_1_member_profiles_genderID", anon_1."member_profiles_SSN" AS "anon_1_member_profiles_SSN", anon_1."member_profiles_DOB" AS "anon_1_member_profiles_DOB", anon_1."member_profiles_industryID" AS "anon_1_member_profiles_industryID", anon_1."member_profiles_primarysectorID" AS "anon_1_member_profiles_primarysectorID", anon_1.member_profiles_address1 AS anon_1_member_profiles_address1, anon_1.member_profiles_address2 AS anon_1_member_profiles_address2, anon_1.member_profiles_city AS anon_1_member_profiles_city, anon_1.member_profiles_state AS anon_1_member_profiles_state, anon_1.member_profiles_zip AS anon_1_member_profiles_zip, anon_1."member_profiles_howhearID" AS "anon_1_member_profiles_howhearID", anon_1."member_profiles_affiliationID" AS "anon_1_member_profiles_affiliationID", anon_1."member_profiles_incomeID" AS "anon_1_member_profiles_incomeID", anon_1."member_profiles_worksituationID" AS "anon_1_member_profiles_worksituationID", anon_1."member_profiles_currentinsuranceID" AS "anon_1_member_profiles_currentinsuranceID", anon_1.member_profiles_referemail AS anon_1_member_profiles_referemail, anon_1.member_profiles_occupation AS anon_1_member_profiles_occupation, anon_1.member_profiles_phonehome AS anon_1_member_profiles_phonehome, anon_1.member_profiles_phonework AS anon_1_member_profiles_phonework, anon_1.member_profiles_phonecell AS anon_1_member_profiles_phonecell, anon_1.member_profiles_phonefax AS anon_1_member_profiles_phonefax, anon_1."member_profiles_occupationID" AS "anon_1_member_profiles_occupationID", anon_1.member_profiles_occupationother AS anon_1_member_profiles_occupationother, anon_1.member_profiles_billing_address1 AS anon_1_member_profiles_billing_address1, anon_1.member_profiles_billing_address2 AS anon_1_member_profiles_billing_address2, anon_1.member_profiles_billing_city AS anon_1_member_profiles_billing_city, anon_1.member_profiles_billing_state AS anon_1_member_profiles_billing_state, anon_1.member_profiles_billing_zip AS anon_1_member_profiles_billing_zip, members_1.pass AS members_1_pass, members_1."memberID" AS "members_1_memberID", members_1.question AS members_1_question, members_1.answer AS members_1_answer, members_1.lockoutflag AS members_1_lockoutflag, members_1.deleteflag AS members_1_deleteflag, members_1.firstname AS members_1_firstname, members_1.lastname AS members_1_lastname, members_1.middleinitial AS members_1_middleinitial, members_1.alert AS members_1_alert, members_1.activeflag AS members_1_activeflag, members_1."crmleadID" AS "members_1_crmleadID", members_1.insuranceflag AS members_1_insuranceflag, members_1."applicationstatusID" AS "members_1_applicationstatusID", members_1.identifier AS members_1_identifier, members_1.email AS members_1_email, member_gender_1.description AS member_gender_1_description, member_gender_1.activeflag AS member_gender_1_activeflag, member_gender_1.orderindex AS member_gender_1_orderindex, member_gender_1."genderID" AS "member_gender_1_genderID" \nFROM (SELECT member_profiles."memberID" AS "member_profiles_memberID", member_profiles."genderID" AS "member_profiles_genderID", member_profiles."SSN" AS "member_profiles_SSN", member_profiles."DOB" AS "member_profiles_DOB", member_profiles."industryID" AS "member_profiles_industryID", member_profiles."primarysectorID" AS "member_profiles_primarysectorID", member_profiles.address1 AS member_profiles_address1, member_profiles.address2 AS member_profiles_address2, member_profiles.city AS member_profiles_city, member_profiles.state AS member_profiles_state, member_profiles.zip AS member_profiles_zip, member_profiles."howhearID" AS "member_profiles_howhearID", member_profiles."affiliationID" AS "member_profiles_affiliationID", member_profiles."incomeID" AS "member_profiles_incomeID", member_profiles."worksituationID" AS "member_profiles_worksituationID", member_profiles."currentinsuranceID" AS "member_profiles_currentinsuranceID", member_profiles.referemail AS member_profiles_referemail, member_profiles.occupation AS member_profiles_occupation, member_profiles.phonehome AS member_profiles_phonehome, member_profiles.phonework AS member_profiles_phonework, member_profiles.phonecell AS member_profiles_phonecell, member_profiles.phonefax AS member_profiles_phonefax, member_profiles."occupationID" AS "member_profiles_occupationID", member_profiles.occupationother AS member_profiles_occupationother, member_profiles.billing_address1 AS member_profiles_billing_address1, member_profiles.billing_address2 AS member_profiles_billing_address2, member_profiles.billing_city AS member_profiles_billing_city, member_profiles.billing_state AS member_profiles_billing_state, member_profiles.billing_zip AS member_profiles_billing_zip \nFROM member_profiles \nWHERE member_profiles."memberID" = %(memberID_1)s \n LIMIT 1 OFFSET 0) AS anon_1 LEFT OUTER JOIN members AS members_1 ON members_1."memberID" = anon_1."member_profiles_memberID" LEFT OUTER JOIN member_gender AS member_gender_1 ON member_gender_1."genderID" = anon_1."member_profiles_genderID" ORDER BY member_profiles."genderID"' {'memberID_1': 81087} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Looks like an error in the outer join of the SQL statement. Am I missing something, or is this a bug? Many thank-yous in advance, and sorry for the length of this. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---