def select(cls, query=None): select_query = SelectQuery(cls, query) if cls._meta.ordering: select_query = select_query.order_by(*cls._meta.ordering) return select_query
def test_select(self): sq = SelectQuery(Blog, '*') logging.info(sq.sql()) self.assertSQLEqual(sq.sql(), ('SELECT `id`, `title` FROM `blog`', [])) sq = SelectQuery(Blog, '*').where(title='a') logging.info(sq.sql()) self.assertSQLEqual(sq.sql(), ('SELECT `id`, `title` FROM `blog` WHERE `title` = ?', ['a'])) sq2 = SelectQuery(Blog, '*').where(Blog.title == 'a') logging.info(sq.sql()) self.assertEqual(sq.sql(), sq2.sql()) sq = SelectQuery(Blog, '*').where(title='a', id=1) logging.info(sq.sql()) self.assertSQLEqual(sq.sql(), ('SELECT `id`, `title` FROM `blog` WHERE (`id` = ? AND `title` = ?)', [1, 'a'])) sq2 = SelectQuery(Blog, '*').where((Blog.id == 1) & (Blog.title == 'a')) logging.info(sq.sql()) self.assertEqual(sq.sql(), sq2.sql()) # check that chaining works as expected sq = SelectQuery(Blog, '*').where(title='a').where(id=1) logging.info(sq.sql()) self.assertSQLEqual(sq.sql(), ('SELECT `id`, `title` FROM `blog` WHERE `title` = ? AND `id` = ?', ['a', 1])) sq2 = SelectQuery(Blog, '*').where(Blog.title == 'a').where(Blog.id == 1) logging.info(sq.sql()) self.assertEqual(sq.sql(), sq2.sql()) # check that IN query special-case works sq = SelectQuery(Blog, '*').where(title__in=['a', 'b']) logging.info(sq.sql()) self.assertSQLEqual(sq.sql(), ('SELECT `id`, `title` FROM `blog` WHERE `title` IN (?,?)', ['a', 'b'])) sq2 = SelectQuery(Blog, '*').where(Blog.title << ['a', 'b']) logging.info(sq.sql()) self.assertEqual(sq.sql(), sq2.sql())