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

Menyimpan ARRAY PostgreSQL dari nilai ENUM

Mulai 1.3.17, tidak ada solusi yang diperlukan lagi

Jawaban di bawah ini berakhir di dokumen sebagai ARRAY dari ENUM . Halaman dokumen ini sekarang mengatakan:

Jawaban lama untuk tujuan historis:

Saya melihat Masalah 3467 diposting oleh Wichert Akkerman, dan solusi ini telah diposting. Kredit untuk Mike Bayer. Deklarasikan kelas berikut dalam kode Anda (tentu saja dengan impor yang diperlukan):

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

class ArrayOfEnum(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):
            if value==None:
                return []
            inner = re.match(r"^{(.*)}$", value).group(1)
            return inner.split(",")

        def process(value):
            return super_rp(handle_raw_string(value))
        return process

ArrayOfEnum sekarang menjadi tipe kolom khusus yang digunakan dalam definisi model.

Jadi, alih-alih

class Judge(db.Model):
    statuses = db.Column(ARRAY(status))

Sekarang Anda dapat melakukan:

class Judge(db.Model):
    statuses = db.Column(ArrayOfEnum(status))

Sekarang dalam kode Anda, Anda dapat menetapkan nilai ke statuses dengan daftar dan itu akan melakukan casting yang tepat setelah menyimpan:

my_judge_object.status = ['unmoderated', 'nominee']



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. daftar tipe Postgres ENUM

  2. Penyedia OleDB/ODBC yang bagus untuk PostgreSQL

  3. mengapa tidak dapat melihat ukuran skema saya

  4. Pemeriksaan variabilitas minimum di R atau PostgreSQL

  5. foreach %dopar% + RPostgreSQL