def test_load(self): A, B, ASub, C = self.classes("A", "B", "ASub", "C") s = Session() q = ( s.query(A) .order_by(A.id) .options(selectinload(ASub.cs), selectinload(A.bs)) ) self._assert_all_selectin(q)
def test_selectinload(self): A, B = self.classes("A", "B") sess = Session() with self.sql_execution_asserter() as asserter: # note this is many-to-one. use_get is unconditionally turned # off for relationship to aliased class for now. a1 = sess.query(A).options(selectinload(A.b)).first() eq_(a1.b, B(id=1)) asserter.assert_( CompiledSQL( "SELECT a.id AS a_id, a.b_id AS a_b_id " "FROM a LIMIT :param_1", [{ "param_1": 1 }], ), CompiledSQL( "SELECT a_1.id AS a_1_id, b.id AS b_id FROM a AS a_1 " "JOIN (b JOIN d ON d.b_id = b.id JOIN c ON c.id = d.c_id) " "ON a_1.b_id = b.id WHERE a_1.id " "IN ([EXPANDING_primary_keys])", [{ "primary_keys": [1] }], ), )
def test_round_trip_results(self): A, B, C = self.classes("A", "B", "C") sess = Session() q = sess.query(A).options(selectinload(A.bs).selectinload(B.cs)) @profiling.function_call_count() def go(): for i in range(100): obj = q.all() list(obj) sess.close() go()
def test_selectinload_query(self): session = ShardedSession( shards={"test": testing.db}, shard_chooser=lambda *args: "test", id_chooser=lambda *args: None, query_chooser=lambda *args: ["test"], ) Book, Page = self.classes("Book", "Page") book = Book() book.pages.append(Page()) session.add(book) session.commit() result = session.query(Book).options(selectinload("pages")).all() eq_(result, [book])
def go(): for a1 in s.query(A).options( selectinload(A.partitioned_bs).joinedload("cs")): for b in a1.partitioned_bs: eq_(len(b.cs), 2)
def go(): for a1 in s.query(A).options(noload("*"), selectinload(A.partitioned_bs)): for b in a1.partitioned_bs: eq_(b.cs, [])
def test_load_company_plus_employees(self): s = Session() q = ( s.query(Company) .options( selectinload(Company.employees).selectin_polymorphic( [Engineer, Manager] ) ) .order_by(Company.company_id) ) result = self.assert_sql_execution( testing.db, q.all, CompiledSQL( "SELECT companies.company_id AS companies_company_id, " "companies.name AS companies_name FROM companies " "ORDER BY companies.company_id", {}, ), CompiledSQL( "SELECT people.company_id AS people_company_id, " "people.person_id AS people_person_id, " "people.name AS people_name, people.type AS people_type " "FROM people WHERE people.company_id " "IN ([EXPANDING_primary_keys]) " "ORDER BY people.person_id", {"primary_keys": [1, 2]}, ), AllOf( CompiledSQL( "SELECT managers.person_id AS managers_person_id, " "people.person_id AS people_person_id, " "people.company_id AS people_company_id, " "people.name AS people_name, people.type AS people_type, " "managers.status AS managers_status, " "managers.manager_name AS managers_manager_name " "FROM people JOIN managers " "ON people.person_id = managers.person_id " "WHERE people.person_id IN ([EXPANDING_primary_keys]) " "ORDER BY people.person_id", {"primary_keys": [3, 4]}, ), CompiledSQL( "SELECT engineers.person_id AS engineers_person_id, " "people.person_id AS people_person_id, " "people.company_id AS people_company_id, " "people.name AS people_name, people.type AS people_type, " "engineers.status AS engineers_status, " "engineers.engineer_name AS engineers_engineer_name, " "engineers.primary_language AS engineers_primary_language " "FROM people JOIN engineers " "ON people.person_id = engineers.person_id " "WHERE people.person_id IN ([EXPANDING_primary_keys]) " "ORDER BY people.person_id", {"primary_keys": [1, 2, 5]}, ), ), ) eq_(result, [self.c1, self.c2])
def go(): selectinload(User.addresses)
def generate(): objects = s.query(User).options(selectinload(User.addresses)).all() gc_collect() return objects