某次数据库升级漏了几个commit, 得修一下, 还是写个alembic, 到时候upgrade就自动修复, 爽歪歪

因为主要就是丢失了几个col, 但又不确定线上哪几个表丢了哪些col, 那么就需要根据数据库实际情况来判断要不要加col, 主要就一句SQL:

select xxx in (
    select column_name
    from information_schema.columns
    where table_name = 'xxx_table'
      and table_schema = 'public')

转成alembic就是这么个func:

def is_col_in(conn, table, col):
    sql = f"""
        select '{col}' in (
            select column_name
            from information_schema.columns
            where table_name = '{table}'
              and table_schema = 'public')
    """
    return conn.execute(sql).fetchone()[0]


def upgrade():
    conn = op.get_bind()
    for table, col in missing_tables:
        if not is_col_in(conn, table, col):
            pass
    ...

怀疑哪些col丢了就轮一遍, 再搞一次, 没毛病