PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Lưu trữ PostgreSQL ARRAY của các giá trị ENUM

Kể từ ngày 1.3.17, không cần giải pháp thay thế nữa

Câu trả lời dưới đây đã có trong tài liệu là ARRAY của ENUM . Trang tài liệu này hiện cho biết:

Câu trả lời cũ cho mục đích lịch sử:

Tôi đã xem Sự cố 3467 được đăng bởi Wichert Akkerman, và công việc xung quanh này đã được đăng. Tín dụng cho Mike Bayer. Khai báo lớp sau trong mã của bạn (tất nhiên với các nhập cần thiết):

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 hiện là một loại cột đặc biệt được sử dụng trong định nghĩa mô hình.

Vì vậy, thay vì

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

Bây giờ bạn có thể làm:

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

Bây giờ trong mã của bạn, bạn có thể gán giá trị cho các trạng thái statuses với một danh sách và nó sẽ thực hiện truyền thích hợp khi lưu:

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. Cách khai thác tốt nhất nhật ký PostgreSQL

  2. PostgreSQL nhiều giao dịch trên cùng một kết nối

  3. Postgres và chỉ mục trên các khóa ngoại và khóa chính

  4. Làm thế nào để đếm ngày trừ Chủ nhật giữa hai ngày trong Postgres?

  5. 5 công cụ giám sát truy vấn PostgreSQL hàng đầu