PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Array Enum di Postgres dengan SQLAlchemy

Saya menemukan solusi yang bagus dalam kode sumber 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

Dan sekarang:

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

Dan kemudian:

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. Kembalikan data dari subpilihan yang digunakan dalam INSERT dalam Ekspresi Tabel Umum

  2. Kesalahan PostGres Saat Menggunakan Distinct :postgres ERROR:tidak dapat mengidentifikasi operator pemesanan untuk jenis catatan

  3. PostgreSQL + Rails kutipan

  4. Buat kolom tipe presisi ganda[] dengan liquibase

  5. Menganalisis/Membuat profil kueri di PostgreSQL