• Почему при возведении в степень Python Numba дает неправильный результат?

    ScriptKiddo
    @ScriptKiddo
    Numba не поддерживает большие числа. Максимально - INT64 : 9223372036854775807

    5f95c0cb55978345246764.png

    https://github.com/numba/numba/issues/5005#issueco...
    Ответ написан
    Комментировать
  • Как устранить ошибку "relation does not exist" в Django?

    @gh0sty Автор вопроса
    Веб-разработчик. Пишу под Python Django.
    Окей я разобрался.
    Краткий гайд по менеджменту большого количества полей, на примере библиотеки Django modeltranslation. Все происходит на сервере и на PostgreSQL. Причина: "tables can have at most 1600 columns" и "row is too big: size ..., maximum size 8160"
    1. Для начала создаем все наши поля на перевод у меня их около 400.
    2. Считаем количество нужных языков + 1, у меня это 6. Почему? Modeltranslation оставляет оригинальное поле, чтоб быстро к нему обращаться на уже смененном языке. Т.е. динамическая удобная фича)
    3. 400 * 6 = 2400 полей по итогу.
    4. Эти 2400 делим примерно на 600-800 (если charfield max_length=200). На моем примере - хватило 5.
    5. Разбиваем наш models и translation на 5 (вычислено выше) приложений. Это по 600 переводных строк, у меня, т.е. 100 обычных строк (+- 10).
    6. Создаем базы под эти приложения (ну это не нуждается в пояснении, create + grant).
    7. Создаем в settings ручные роуты, я их так называю. Пример:

      DATABASES = {
          'default': {  # Сюда будут записываться другие приложения, оставить "default"!!!
                  'ENGINE': 'django.db.backends.postgresql_psycopg2',
                  'NAME': 'db',
                  'USER': 'username',
                  'PASSWORD': 'pass',
                  'HOST': 'localhost',
                  'PORT': '',
          },
          't': {
                  'ENGINE': 'django.db.backends.postgresql_psycopg2',
                  'NAME': 'db_t',
                  'USER': 'username',
                  'PASSWORD': 'pass',
                  'HOST': 'localhost',
                  'PORT': '',
          },
          't2': {
                  'ENGINE': 'django.db.backends.postgresql_psycopg2',
                  'NAME': 'db_t2',
                  'USER': 'username',
                  'PASSWORD': 'pass',
                  'HOST': 'localhost',
                  'PORT': '',
          },
          't3': {
                  'ENGINE': 'django.db.backends.postgresql_psycopg2',
                  'NAME': 'db_t3',
                  'USER': 'username',
                  'PASSWORD': 'pass',
                  'HOST': 'localhost',
                  'PORT': '',
          },
          't4': {
                  'ENGINE': 'django.db.backends.postgresql_psycopg2',
                  'NAME': 'db_t4',
                  'USER': 'username',
                  'PASSWORD': 'pass',
                  'HOST': 'localhost',
                  'PORT': '',
          },
          't5': {
                  'ENGINE': 'django.db.backends.postgresql_psycopg2',
                  'NAME': 'db_t5',
                  'USER': 'username',
                  'PASSWORD': 'pass',
                  'HOST': 'localhost',
                  'PORT': '',
          }
      }


    8. Записываем их все в приложения. НО!!! закомментируем.
    9. В папках migrations в каждом приложении перевода удаляем все, кроме кеша и _init_.
    10. Проводим на всяк случай makemigrations и migrations без параметров для остальных приложений, чтобы удостовериться что все будет записано правильно.
    11. Далее раскомментируем в settings самое первое приложение. И применяем:

      manage.py makemigrations <название приложения перевода>
      manage.py migratе <название приложения перевода> --database=t<номер базы>
      manage.py migratе
      manage.py runserver <параметры>
      *Создаем тестовый экземпляр*
      manage.py update_translation_fields

      И проводим этот набор операций один за одним для каждого приложения.


    Это делается, чтобы не было бредовых ошибок. Уж поверьте их может быть море. Если что-то не получается пересоздаем базы данных (желательно с новым именем), чистим migrations и начинаем сначала. Если что-то явно не получается - гуглим ошибку. Тут основная часть всей дичи, которая может вам встретиться.
    Ответ написан
    Комментировать