Files
deb-python-sqlalchemy-utils/tests/batch_fetch/test_one_to_many_composite_keys.py
2015-03-17 17:35:55 +02:00

75 lines
2.4 KiB
Python

import sqlalchemy as sa
from sqlalchemy_utils import batch_fetch
from tests import TestCase
class TestBatchFetchWithCompositeKeyRelationships(TestCase):
def create_models(self):
class User(self.Base):
__tablename__ = 'user'
first_name = sa.Column(sa.Unicode(255), primary_key=True)
last_name = sa.Column(sa.Unicode(255), primary_key=True)
class Article(self.Base):
__tablename__ = 'article'
id = sa.Column(sa.Integer, primary_key=True)
name = sa.Column(sa.Unicode(255))
author_first_name = sa.Column(
sa.Unicode(255), sa.ForeignKey(User.first_name)
)
author_last_name = sa.Column(
sa.Unicode(255), sa.ForeignKey(User.last_name)
)
author = sa.orm.relationship(
User,
primaryjoin=sa.and_(
author_first_name == User.first_name,
author_last_name == User.last_name
),
backref=sa.orm.backref(
'articles'
)
)
self.User = User
self.Article = Article
def setup_method(self, method):
TestCase.setup_method(self, method)
self.users = [
self.User(first_name=u'John', last_name=u'Matrix'),
self.User(first_name=u'John', last_name=u'The Ripper')
]
articles = [
self.Article(
id=1,
name=u'Article 1',
author=self.users[0]
),
self.Article(
id=2,
name=u'Article 2',
author=self.users[1]
),
self.Article(
id=3,
name=u'Article 3'
)
]
self.session.add_all(articles)
self.session.commit()
def test_supports_relationship_attributes(self):
articles = self.session.query(self.Article).all()
batch_fetch(
articles,
'author'
)
query_count = self.connection.query_count
assert articles[0].author == self.users[0] # no lazy load should occur
assert articles[1].author == self.users[1] # no lazy load should occur
assert articles[2].author is None # no lazy load should occur
assert self.connection.query_count == query_count