[Sqlalchemy-tickets] [sqlalchemy] #2751: assocaition proxy support for scalar-targeted attributes
Brought to you by:
zzzeek
|
From: sqlalchemy <mi...@zz...> - 2013-06-08 16:34:54
|
#2751: assocaition proxy support for scalar-targeted attributes
--------------------+---------------------------------------
Reporter: zzzeek | Owner: zzzeek
Type: defect | Status: new
Priority: medium | Milestone: 0.8.xx
Component: ext | Severity: minor - half an hour
Keywords: | Progress State: in progress
--------------------+---------------------------------------
{{{
#!python
from sqlalchemy.engine import create_engine
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.ext.declarative.api import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy.orm.session import sessionmaker
from sqlalchemy.schema import Column, ForeignKey
from sqlalchemy.types import Integer, String
Base = declarative_base()
class A(Base):
__tablename__ = 'table_a'
id = Column(Integer, primary_key=True)
color = Column(String)
def __init__(self, color):
self.color = color
class B(Base):
__tablename__ = 'table_b'
id = Column(Integer, primary_key=True)
a_id = Column(Integer, ForeignKey('table_a.id'))
a_re = relationship('A', backref='b_re')
a_color = association_proxy('a_re', 'color')
if __name__ == '__main__':
engine = create_engine('sqlite:///:memory:', echo=True)
Session = sessionmaker(engine)
session = Session()
Base.metadata.create_all(engine)
b1 = B()
b2 = B()
b3 = B()
b4 = B()
b1.a_color = 'blue'
b2.a_re = A(color=None)
session.add_all([b1, b2, b3, b4])
q = session.query(B).filter(B.a_color == None).all()
p = session.query(B).filter(B.a_color != None).all()
# will also add a special feature for this
r = session.query(B).filter(B.a_color.has()).all()
assert q == [b2, b3, b4]
assert p == [b1]
assert r == [b1, b2]
}}}
--
Ticket URL: <http://www.sqlalchemy.org/trac/ticket/2751>
sqlalchemy <http://www.sqlalchemy.org/>
The Database Toolkit for Python
|