PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Масив от Enum в Postgres с SQLAlchemy

Намерих добро решение в изходния код на SqlAlchemy:

import re

from sqlalchemy import TypeDecorator, cast
from sqlalchemy.dialects.postgresql import ARRAY


class ArrayOfEnum(TypeDecorator):

    impl = ARRAY

    def bind_expression(self, bindvalue):
        return cast(bindvalue, self)

    def result_processor(self, dialect, coltype):
        super_rp = super(ArrayOfEnum, self).result_processor(dialect, coltype)

        def handle_raw_string(value):
            inner = re.match(r"^{(.*)}$", value).group(1)

            return inner.split(",") if inner else []

        def process(value):
            if value is None:
                return None

            return super_rp(handle_raw_string(value))

        return process

И сега:

achievements = Column(ArrayOfEnum(Enum(AchievementsType)))

И след това:

career.achievements = [AchievementsType.world, AchievementsType.local]


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Заключване на конкретен ред в postgres

  2. Настройка на Django:psycopg2.OperationalError:FATAL:Неуспешно удостоверяване на партньор за потребител indivo

  3. Hibernate 4 и Postgres:Как да създадете последователност на таблица?

  4. Не може да се присъедини и да избере в Sequel -- PG::SyntaxError

  5. PostgreSQL:дублираната стойност на ключ нарушава уникалното ограничение на командата UPDATE