Exemple #1
0
def move_db() -> None:
    logging_settings = settings.LOGGING
    logging_settings['loggers']['peewee']['level'] = 'INFO'
    logging.config.dictConfig(settings.LOGGING)

    sqlite_db = get_db()

    initdb.create_tables()
    with peewee_db:
        cur = sqlite_db.execute('select count(*) AS cnt from messages')
        messages_count = cur.fetchone()['cnt']
        cur = sqlite_db.execute('select chat_id, message_id, user_id from messages')

        logger.info('moving %s messages', messages_count)
        for index, row in enumerate(cur):
            if index % 100 == 0:
                logger.info('%s messages...', index)
            Message.get_or_create(
                chat_tg_id=row['chat_id'],
                message_tg_id=row['message_id'],
                user_tg_id=row['user_id'],
            )

        cur = sqlite_db.execute('select count(*) AS cnt from likes')
        likes_count = cur.fetchone()['cnt']
        cur = sqlite_db.execute('select chat_id, message_id, user_id, like_type from likes')

        logger.info('moving %s likes', likes_count)
        for index, row in enumerate(cur):
            if index % 100 == 0:
                logger.info('%s likes...', index)
            msg, _ = Message.get_or_create(
                chat_tg_id=row['chat_id'],
                message_tg_id=row['message_id'],
                defaults={'user_tg_id': -1},
            )

            like = Like.filter(
                Like.message_id == msg.id,
                Like.user_tg_id == row['user_id'],
            ).first()

            if like:
                like.type = row['like_type']
                like.save()
            else:
                Like.create(
                    message_id=msg.id,
                    user_tg_id=row['user_id'],
                    type=row['like_type'],
                )