Уведомления

Группа в Telegram: @pythonsu

#1 Май 22, 2013 11:10:23

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

sqlalchemy и postgresql.CIDR

SELECT net FROM nets WHERE net >> '10.0.0.0/8'

Можно как-нибудь такие запросы в sqlalchemy перевести? А то костыли с использованием __tablename__ пишу



Офлайн

#2 Май 23, 2013 13:08:51

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

sqlalchemy и postgresql.CIDR

Где спросить то еще можно, никто sqlalchemy глубоко не использует? На stackoverflow тоже молчат.



Офлайн

#3 Май 23, 2013 15:00:01

govnokoder
Зарегистрирован: 2013-04-04
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlalchemy и postgresql.CIDR

session.query(Net).filter("net >> '10.0.0.0/8'")

Офлайн

#4 Май 24, 2013 10:14:11

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

sqlalchemy и postgresql.CIDR

govnokoder
session.query(Net).filter(“net >> ‘10.0.0.0/8’”)
Ну этот вариант я знаю и использую пока, но это тоже самое, что raw-sql. А мне надо названия колонки указывать с помощью переменных а не непосредственно в запросе.



Офлайн

#5 Май 24, 2013 13:00:12

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

sqlalchemy и postgresql.CIDR

Решил вот таким образом вручную добавив оператор для колонки:

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' )



Отредактировано plusplus (Май 24, 2013 13:00:49)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version