Найти - Пользователи
Полная версия: sqlalchemy и postgresql.CIDR
Начало » Базы данных » sqlalchemy и postgresql.CIDR
1
plusplus
SELECT net FROM nets WHERE net >> '10.0.0.0/8'

Можно как-нибудь такие запросы в sqlalchemy перевести? А то костыли с использованием __tablename__ пишу
plusplus
Где спросить то еще можно, никто sqlalchemy глубоко не использует? На stackoverflow тоже молчат.
govnokoder
session.query(Net).filter("net >> '10.0.0.0/8'")
plusplus
govnokoder
session.query(Net).filter(“net >> ‘10.0.0.0/8’”)
Ну этот вариант я знаю и использую пока, но это тоже самое, что raw-sql. А мне надо названия колонки указывать с помощью переменных а не непосредственно в запросе.
plusplus
Решил вот таким образом вручную добавив оператор для колонки:
class Cidr(postgresql.CIDR):
    '''
    Делаем свой тип колонки для того, чтобы была возможность использовать
    операторы >> и <<
    '''
    class comparator_factory(postgresql.CIDR.Comparator):
        def __lshift__(self, other):
            return self.op("<<")(other)
        def __rshift__(self, other):
            return self.op(">>")(other)
class Net(Base):
    __tablename__ = 'test_nets'
    id = Column(Integer, primary_key=True)
    net = Column(Cidr)
session.query(Net).filter(Net.net >> '10.0.0.0/8' )
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB