well I cant run the program since its not complete (no Drug, Supplier class/tables defined, etc), but if id hazard a guess id say you shouldnt be calling "flush()" on your class instances, since it will not flush any changes on any dependencies. call ctx.current.flush() instead.
On Feb 20, 2007, at 1:40 PM, Ali wrote: > > Ok, > > from sqlalchemy import * > > > from sqlalchemy.ext.assignmapper import assign_mapper > from sqlalchemy.ext.sessioncontext import SessionContext > > meta = DynamicMetaData() > > ctx = SessionContext(create_session) > > def make_engine(uri=None): > if uri is None: > uri = 'sqlite:///:memory:' > engine = create_engine(uri, echo=True) > return engine > > def connect(uri=None): > meta.connect(make_engine(uri=uri)) > > > users_table = Table('user', meta, > Column('id', Integer, autoincrement=True, primary_key=True), > Column('name', String), > Column('password', String), > Column('registration', String), > ) > > class User(object): > """User""" > def get_is_admin(self): > return self.id == 1 > is_admin = property(get_is_admin) > > def __str__(self): > s = self.name > if self.registration: > s = '%s (%s)' % (s, self.registration) > return s > > assign_mapper(ctx, User, users_table) > > stockreceipt_table = Table('stockreceipt', meta, > Column('id', Integer, autoincrement=True, primary_key=True), > Column('drug_id', Integer, ForeignKey('drug.id')), > Column('date', Date), > Column('quantity', Integer), > Column('supplier_id', Integer, ForeignKey('supplier.id')), > Column('user_id', Integer, ForeignKey('user.id')), > Column('cancelled', Boolean), > Column('cancelled_reason', String), > Column('cancelled_user_id', Integer, ForeignKey('user.id')), > Column('internal_transfer', Boolean), > Column('invoice_number', String), > Column('internal_from', String), > ) > > class Receipt(object): > """Stock Receipt""" > def get_cancelled_user_hack(self): > return User.get_by(id=self.cancelled_user_id) > cancelled_user_hack = property(get_cancelled_user_hack) > > assign_mapper(ctx, Receipt, stockreceipt_table, > properties=dict( > user=relation(User, backref='receipts', > primaryjoin=stockreceipt_table.c.user_id == > users_table.c.id), > cancelled_user=relation(User, backref='cancelled_receipts', > lazy=False, > primaryjoin=stockreceipt_table.c.cancelled_user_id == > users_table.c.id), > supplier=relation(Supplier, backref='receipts'), > drug=relation(Drug, backref='receipts'), > ) > ) > > meta.create_all() > connect() > >>>> u = User(name='Ali') >>>> u.flush() >>>> r = Receipt(user_id=u.id) >>>> r.flush() >>>> r.user is u > True >>>> r.cancelled_user_id = u.id >>>> r.flush() >>>> r.cancelled_user is u > True > > Now, as I mentioned, r.cancelled_user is set correctly in this > example, but not (always) in my application, although it is used > similarly. (I am happy to paste 2000 lines of PyGTK if you like). When > the attribute is accessed, there is no SQL output at all, although in > this example there is. > > Thanks for any assistance, > > Ali > > > On Feb 20, 6:04 pm, "Michael Bayer" <[EMAIL PROTECTED]> wrote: >> why dont you attach a script that runs completely ? use a >> "sqlite://" >> database. >> >> On Feb 20, 12:14 pm, "Ali" <[EMAIL PROTECTED]> wrote: >> >>> By "both", I mean user and receipt tables >> >>> On 20 Feb, 17:12, "Ali" <[EMAIL PROTECTED]> wrote: >> >>>> I left out the fields for brevity of example. They both have an id >>>> column defined as primary keys. >> >>>> On 20 Feb, 17:11, "Michael Bayer" <[EMAIL PROTECTED]> wrote: >> >>>>> On Feb 20, 12:01 pm, "Ali" <[EMAIL PROTECTED]> wrote: >> >>>>>> Here is my code (with other fields removed): >> >>>>>> stockreceipt_table = Table('stockreceipt', meta, >>>>>> Column('user_id', Integer, ForeignKey('user.id')), >>>>>> # Cancellation >>>>>> Column('cancelled_user_id', Integer, ForeignKey('user.id')), >>>>>> ) >> >>>>>> class Receipt(object): >>>>>> """Stock Receipt""" >> >>>>>> assign_mapper(ctx, Receipt, stockreceipt_table, >>>>>> properties=dict( >>>>>> user=relation(User, backref='receipts', >>>>>> primaryjoin=stockreceipt_table.c.user_id == >>>>>> users_table.c.id), >>>>>> cancelled_user=relation(User, >>>>>> backref='cancelled_receipts', >>>>>> lazy=False, >>>>>> primaryjoin=stockreceipt_table.c.cancelled_user_id == >>>>>> users_table.c.id), >>>>>> ) >> >>>>> that cant be right, since theres no primary key expressed >>>>> either in >>>>> the stockreceipt_table or in your Receipt mapper. > > > > --~--~---------~--~----~------------~-------~--~----~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---