Пользовательский код миграции Alembi c не работает, большой запрос - PullRequest
0 голосов
/ 08 марта 2020

Я пробую этот запрос в alembi c код миграции

def get_my_table_id_list(connection):
    duplicate_id_list = connection.execute(
        """
        SELECT
            a.id
        FROM
            my table AS a
        WHERE
            a.created_datetime > (
                SELECT
                    MIN(b.created_datetime)
                FROM
                    map_direction AS b
                WHERE
                    < condition >)
        LIMIT 1000
        """
    ).fetchall()

    return duplicate_id_list


def delete_my_table(connection, id_list):
    test = connection.execute(
        f"""
        DELETE FROM map_direction
        WHERE my table.id IN ({", ".join(id_list)})
        """
    )

    print(test.rowcount)


def check_and_delete_duplicate_my_tablle(connection):
    duplicate_id_list = get_duplicate_id_list(connection)

    if len(duplicate_id_list) < 1:
        return True
    else:
        duplicate_id_list = list(map(lambda _id: str(_id[0]), duplicate_id_list))

        delete_my_table(connection, duplicate_id_list)

        check_and_delete_duplicate_my_table(connection)

    return False

, используя эти функции в моем коде миграции и запускаю flask db upgrade or alembic upgrade +1

моя база данных равна psql, моя таблица все строки: 5 000 000 очень больших таблиц

Если моя строка БД меньше 100 000, эти функции работают для меня. Но мой стол очень и очень большой! эта функция не работает для меня.

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 10 марта 2020
def get_my_table_id_list(connection):
    duplicate_id_list = connection.execute(
        """
        SELECT
            a.id
        FROM
            my table AS a
        WHERE
            a.id > (
                SELECT
                    MIN(b.id)
                FROM
                    map_direction AS b
                WHERE
                    < condition >)
        LIMIT 1000
        """
    ).fetchall()

    return duplicate_id_list

............ Был дубликат create_datetime.

...