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
-~----------~----~----~----~------~----~------~--~---

Reply via email to