PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

ENUM मानों का PostgreSQL ARRAY संग्रहीत करना

1.3.17 से, अब किसी समाधान की आवश्यकता नहीं है

नीचे दिया गया उत्तर डॉक्स में के रूप में समाप्त हुआ ENUM की सरणी . यह दस्तावेज़ पृष्ठ अब कहता है:

ऐतिहासिक उद्देश्यों के लिए पुराना उत्तर:

मैंने अंक 3467 देखा Wichert Akkerman द्वारा पोस्ट किया गया था, और यह वर्कअराउंड पोस्ट किया गया था। माइक बेयर को श्रेय। अपने कोड में निम्न वर्ग घोषित करें (निश्चित रूप से आवश्यक आयात के साथ):

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 अब एक विशेष स्तंभ प्रकार है जिसका उपयोग मॉडल परिभाषा में किया जाता है।

तो इसके बजाय

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

अब आप यह कर सकते हैं:

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

अब अपने कोड में आप statuses . को मान निर्दिष्ट कर सकते हैं एक सूची के साथ और यह सहेजने पर उचित कास्टिंग करेगा:

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. PostgreSQL कैसे देखें कि कौन से प्रश्न चले हैं

  2. PostgreSQL ट्रिगर कुछ भी वापस नहीं कर रहा है

  3. पोस्टग्रेज़ करने के लिए सीम फ़ाइल अपलोड बाइटा कॉलम कॉलम बाइटा है लेकिन अभिव्यक्ति प्रकार की है bigint

  4. मैं अपने डेटा से एक jsonb सरणी और वस्तुओं की सरणी कैसे वापस कर सकता हूं?

  5. Postgresql डेटाबेस में चल रही क्वेरी की स्थिति कैसे प्राप्त करें