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

Array of Enum trong Postgres với SQLAlchemy

Tôi tìm thấy giải pháp tốt trong mã nguồn 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

Và bây giờ:

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

Và sau đó:

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. Hiểu dàn diễn viên từ bytea đến oid

  2. PostgreSQL chậm trên một bảng lớn với các mảng và nhiều bản cập nhật

  3. Thực thi truy vấn thô khi di chuyển - Sắp xếp thứ tự 3.30

  4. Cách chuyển đổi số nguyên thành chuỗi và lấy độ dài của chuỗi

  5. Lấy N hàng cuối cùng trong cơ sở dữ liệu theo thứ tự?