its almost an example fit for a tutorial. I'd just lose the "setBrand()"
method and just assign car.brand = somebrand. the "brand_id" gets
populated by the ORM when things are flushed.
Frank Broniewski wrote:
>
> Hi all,
>
> I want to know if I am using SQLAlchemy in a correct and proper way for
> Many
> to One Relations between objects and database tables. I have created a
> test
> case for Cars and Brands. Each car can have a name and one Brand. I wonder
> if
> I use the setter in the Car Class correctly and if the assignement in the
> car
> mapper is correct also.
> Just to be clear, it is working, but I want to know if I use everything
> correctly here.
>
> Many thanks for your comments
>
> Frank
>
> CODE:
>
> #!/usr/bin/python
> # coding: utf-8
> from sqlalchemy import create_engine, Table, Column, Integer, String,
> MetaData, ForeignKey
> from sqlalchemy.orm import mapper, sessionmaker, relation, backref
> engine = create_engine('sqlite:///:memory:', echo=True)
>
> class Car(object):
> def __init__(self, name):
> self.name = name
> self.brand = None
> self.brand_id = None
>
> def setBrand(self, brand):
> self.brand_id = brand.id
> self.brand = brand
>
> class Brand(object):
> def __init__(self, name):
> self.name = name
>
>
> metadata = MetaData()
>
> brands = Table('brands', metadata
> ,Column('id', Integer, primary_key=True)
> ,Column('name', String(10),
> nullable=False))
>
> cars = Table('cars', metadata
> ,Column('id', Integer, primary_key=True)
> ,Column('name', String(10),
> nullable=False)
> ,Column('brand_id', Integer,
> ForeignKey('brands.id')))
>
> metadata.create_all(engine)
>
> mapper(Car, cars, properties={'brand': relation(Brand)})
> mapper(Brand, brands)
>
> Session = sessionmaker(bind=engine, autoflush=True)
> ps = Session()
>
> porsche = Brand('Porsche')
> bmw = Brand('BMW')
> audi = Brand('Audi')
>
> # some Audis
> a4 = Car('A4 quattro')
> a4.setBrand(audi)
> a6 = Car('A6')
> a6.setBrand(audi)
> # a BMW
> i326 = Car('i326')
> i326.setBrand(bmw)
>
> ps.add(a4)
> ps.add(a6)
> ps.add(i326)
>
> res = ps.query(Car)
>
> for a_car in res:
> print a_car.brand.name
> --
> Frank Broniewski
>
> Metrico s.àr.l. ( http://www.metrico.lu )
> 36, rue des Romains
> L-5433 Niederdonven
> Luxembourg
>
> Fon: +352 26 74 94 28
> Fax: +352 26 74 94 99
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---