Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Неправильно работает array of inet в sqlalchemy. [RSS Feed]

#1 Май 13, 2016 11:35:52

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

Неправильно работает array of inet в sqlalchemy.

Пишу на flask-е, есть вот такая модель:

from flask.ext.sqlalchemy import SQLAlchemy
from sqlalchemy.dialects.postgresql import ARRAY, INET, Integer, Unicode, Column
db = SQLAlchemy()
class User(db.Model):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    login = Column(Unicode(15))
    password = Column(Unicode(34))
    name = Column(Unicode(100))
    permitted_ips = Column(ARRAY(INET))

Вот какой результат я получаю, когда пытаюсь обратиться к permitted_ips:

user = User.query.get(84)
print user.permitted_ips
#['{', '1', '7', '2', '.', '2', '0', '.', '2', '5', '.', '2', ',', '1', '7', '2', '.', '2', '0', '.', '2', '5', '.', '3', '}']

Column(ARRAY(Unicode)) работает нормально при этом. Версия sqlalchemy 0.9.10, пробовал ставить последнюю - не помогло. Как быть?



Офлайн

#2 Май 13, 2016 12:49:04

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Неправильно работает array of inet в sqlalchemy.

plusplus
скорее всего нужно что то подобное дока

Офлайн

#3 Май 16, 2016 07:37:04

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

Неправильно работает array of inet в sqlalchemy.

sander, сделал как-то так:

class INET_ARRAY(ARRAY):
    def bind_processor(self, dialect):
        def process(value):
            if value is None:
                return value
            else:
                return "{%s}" % ','.join(value)
        return process
    def result_processor(self, dialect, coltype):
        item_proc = self.item_type.\
            dialect_impl(dialect).\
            result_processor(dialect, coltype)
        def process(value):
            if value is None:
                return value
            else:
                value = value.replace('{', '').replace('}', '').split(',')
                return self._proc_array(
                    value,
                    item_proc,
                    self.dimensions,
                    tuple if self.as_tuple else list)
        return process

На stackoverflow подсказали вариант попроще: http://stackoverflow.com/questions/37204982/how-to-use-array-of-inet-in-flask-sqlalchemy/37216639#37216639 Но на update он не работает:
    user = User.query.get(84)
    user.permitted_ips = ['172.20.25.2']
    db.session.commit()
    #sqlalchemy.exc.ProgrammingError: (ProgrammingError) column "permitted_ips" is of type inet[] but expression is of type text[]
    #LINE 1: UPDATE passwd SET permitted_ips=ARRAY['172.20.25.2'] WHERE p...



Отредактировано plusplus (Май 16, 2016 07:46:51)

Офлайн

  • Начало
  • » Web
  • » Неправильно работает array of inet в sqlalchemy.[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version