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

Flask-SQLAlchemy小文字インデックス-スキップ機能、SQLAlchemyリフレクションではサポートされていません

    UNIQUE INDEXを追加する必要があります alembicのexecuteを使用して手動で 方法。このようなものを移行スクリプトに追加します。

    from alembic import op
    # ...
    
    def upgrade():
        # ...
        op.execute(
            """ CREATE UNIQUE INDEX users_normalized_username
                ON users
                (lower(username))
            """
        )
    
    def downgrade():
        # ...
        op.execute("DROP INDEX users_normalized_username")
    

    ColumnPropertyを追加することもできます したがって、usernameの正規化された表現にアクセスできます 。

    from sqlalchemy import Column, String, func, orm
    
    class User(Base):
        __tablename__ = 'users'
    
        username = Column(String(32))
        normalized_username = orm.column_property(func.lower(username))
    
        # ...
    

    これにより、データベースに余分な列が作成されることはありませんが、クエリを実行して比較することはできます。

    session.query(User).filter(User.normalized_username == func.lower(username)).first()
    


    1. OracleDatabaseのPL/SQL変数の概要

    2. 条件付きJOINステートメントSQLServer

    3. 最初にEFコードを使用して複合キーをマッピングする

    4. すべてのテーブルのMySQL変更照合