import sqlalchemy as sa from sqlalchemy_utils import escape_like, defer_except from sqlalchemy_utils.functions import non_indexed_foreign_keys from tests import TestCase class TestEscapeLike(TestCase): def test_escapes_wildcards(self): assert escape_like('_*%') == '*_***%' class TestDeferExcept(TestCase): def test_deferred_loads_all_columns_except_the_ones_given(self): query = self.session.query(self.Article) query = defer_except(query, ['id']) assert str(query) == 'SELECT article.id AS article_id \nFROM article' class TestFindNonIndexedForeignKeys(TestCase): def create_models(self): class User(self.Base): __tablename__ = 'user' id = sa.Column(sa.Integer, autoincrement=True, primary_key=True) name = sa.Column(sa.Unicode(255)) class Category(self.Base): __tablename__ = 'category' id = sa.Column(sa.Integer, primary_key=True) name = sa.Column(sa.Unicode(255)) class Article(self.Base): __tablename__ = 'article' id = sa.Column(sa.Integer, primary_key=True) name = sa.Column(sa.Unicode(255)) author_id = sa.Column( sa.Integer, sa.ForeignKey(User.id), index=True ) category_id = sa.Column(sa.Integer, sa.ForeignKey(Category.id)) category = sa.orm.relationship( Category, primaryjoin=category_id == Category.id, backref=sa.orm.backref( 'articles', ) ) self.User = User self.Category = Category self.Article = Article def test_finds_all_non_indexed_fks(self): fks = non_indexed_foreign_keys(self.Base.metadata, self.engine) assert ( 'article' in fks ) column_names = [ column_name for column_name in fks['article'][0].columns ] assert 'category_id' in column_names assert 'author_id' not in column_names