sql >> データベース >  >> RDS >> PostgreSQL

SQLAlchemyを使用したPostgresの列挙型の配列

    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
    

    そして今:

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

    そして:

    career.achievements = [AchievementsType.world, AchievementsType.local]
    


    1. PGpoolのガイド-ヒントと観察:パート3-

    2. mysqlDATETIME列をエポック秒に変換します

    3. 条件でエイリアスcoalesceを使用する:coalesce(max(case when value then value)asエイリアス

    4. テーブルに影響を与えたSQLをログに記録するトリガーを作成しますか?