Ok It's working but I can't use 'between':

engine = meta.Session.query(Engine).outerjoin((Version,
Engine.min_version_id==Version.id)).filter(between(request.POST
['version'], Engine.min_version.version,
Engine.max_version.version)).all()

and I've got error:

AttributeError: Neither 'InstrumentedAttribute' object nor
'Comparator' object has an attribute 'version'

What am I doing wrong?

On 22 Maj, 17:59, "Michael Bayer" <mike...@zzzcomputing.com> wrote:
> sniipe wrote:
>
> > Hi :)
>
> > I have three tables:
>
> > 1)
> > t_version = sa.Table("versions", meta.metadata,
> >     sa.Column("id", sa.types.Integer(), primary_key=True,
> > autoincrement=True),
> >     sa.Column("version", mysql.MSChar(length=100,
> > collation='utf8_polish_ci'), nullable=False, unique=True)
> > )
>
> > class Version(object):
> >     pass
>
> > orm.mapper(Version, t_version)
>
> > 2)
> > t_type = sa.Table("types",
> > meta.metadata,
> >     sa.Column("id", sa.types.Integer(), primary_key=True,
> > autoincrement=True),
> >     sa.Column("name", mysql.MSChar(length=100,
> > collation='utf8_polish_ci'), nullable=False, unique=True),
> > )
>
> > class Type(object):
> >     pass
>
> > orm.mapper(Type, t_type, properties = {
> >     'engine' : orm.relation(Engine, uselist=False,
> > backref='Type_Engine')
> > })
>
> > 3)
> > t_engine = sa.Table("engines", meta.metadata,
> >     sa.Column("id", sa.types.Integer(), primary_key=True,
> > autoincrement=True),
> >     sa.Column("min_version_id", sa.types.Integer(), sa.ForeignKey
> > ("versions.id"), nullable=False),
> >     sa.Column("max_version_id", sa.types.Integer(), sa.ForeignKey
> > ("versions.id"), nullable=False),
> >     sa.Column("type_id", sa.types.Integer(), sa.ForeignKey
> > ("types.id"), nullable=False),
> > )
>
> > class Engine(object):
> >     pass
>
> > orm.mapper(Engine, t_engine, properties = {
> >     'type' : orm.relation(Type, uselist=False, backref='Engine_Type'),
> >     'min_version' : orm.relation(Version,
> > primaryjoin=t_engine.c.min_version_id==t_version.c.id),
> >     'max_version' : orm.relation(Version,
> > primaryjoin=t_engine.c.max_version_id==t_version.c.id)
> > })
>
> > My problem is how to make query equal this SQL instruction "select
> > e.id, e.type_id, tv.version as min_version, tv2.version as max_version
> > from engines e join versions tv on(e.min_version_id=tv.id) join
> > versions tv2 on(e.max_version_id=tv2.id) where '7.0.1.32' between
> > tv.version and tv2.version;"
>
> > I've tried to do something like that:
>
> > engine = meta.Session.query(Engine).outerjoin(Version).filter(between
> > (request.POST['version'], Engine.min_version.version,
> > Engine.max_version.version)).all()
>
> when you do the outerjoin, pass it the relation you're joining on or an
> onclause, such as
>
> query.outerjoin(Version.engine)
>
> or
>
> query.outerjoin((Version, Engine.some_col==Version.some_other_col))
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to