복붙노트

[PYTHON] Django AutoFields를 더 높은 수로 시작하는 방법

PYTHON

Django AutoFields를 더 높은 수로 시작하는 방법

Django App의 경우 AutoField를 1 이외의 숫자로 시작하고 싶습니다.이 작업을 수행하는 분명한 방법이없는 것 같습니다. 어떤 아이디어?

해결법

  1. ==============================

    1.다른 사람들이 말했듯이, 이것은 장고 측보다 데이터베이스 측에서 훨씬 더 쉬울 것입니다.

    다른 사람들이 말했듯이, 이것은 장고 측보다 데이터베이스 측에서 훨씬 더 쉬울 것입니다.

    Postgres의 경우 다음과 같을 것입니다 : ALTER SEQUENCE sequence_name 12345; 자신의 DB 엔진의 문서를보고 거기에서 어떻게 할 것인가.

  2. ==============================

    2.MySQL의 경우 syncdb 이후에이 작업을 수행하는 신호를 만들었습니다.

    MySQL의 경우 syncdb 이후에이 작업을 수행하는 신호를 만들었습니다.

    from django.db.models.signals import post_syncdb
    from project.app import models as app_models
    
    def auto_increment_start(sender, **kwargs):
        from django.db import connection, transaction
        cursor = connection.cursor()
        cursor = cursor.execute("""
                                    ALTER table app_table AUTO_INCREMENT=2000
                                """)
        transaction.commit_unless_managed()
    
    post_syncdb.connect(auto_increment_start, sender=app_models)
    

    syncdb 후에 alter table 문이 실행됩니다. 이렇게하면 mysql에 로그인하여 수동으로 발행하지 않아도됩니다.

    편집 : 이것은 오래된 스레드인지,하지만 누군가가 도움이 될 줄 알았는데.

  3. ==============================

    3.여기 내가 한 일이 ..

    여기 내가 한 일이 ..

    def update_auto_increment(value=5000, app_label="remrate_data"):
        """Update our increments"""
        from django.db import connection, transaction, router
        models = [m for m in get_models() if m._meta.app_label == app_label]
        cursor = connection.cursor()
        for model in models:
            _router = settings.DATABASES[router.db_for_write(model)]['NAME']
            alter_str = "ALTER table {}.{} AUTO_INCREMENT={}".format(
                _router, model._meta.db_table, value)
            cursor.execute(alter_str)
            transaction.commit_unless_managed()
    
  4. ==============================

    4.자동 필드는 사용되는 데이터베이스 드라이버에 따라 어느 정도 좌우됩니다.

    자동 필드는 사용되는 데이터베이스 드라이버에 따라 어느 정도 좌우됩니다.

    특정 데이터베이스에 대해 실제로 생성 된 개체를보고 무슨 일이 일어나는지 확인해야합니다.

  5. ==============================

    5.근원에 빠른 엿봄은 이것을위한 아무 선택권도 않는 것을 보인다, 아마 항상 1에 의하여 증가하지 않기 때문에; 다음 사용 가능한 키를 선택합니다 : "사용 가능한 ID에 따라 자동으로 증가하는 IntegerField"- djangoproject.com

    근원에 빠른 엿봄은 이것을위한 아무 선택권도 않는 것을 보인다, 아마 항상 1에 의하여 증가하지 않기 때문에; 다음 사용 가능한 키를 선택합니다 : "사용 가능한 ID에 따라 자동으로 증가하는 IntegerField"- djangoproject.com

  6. ==============================

    6.비슷한 것을 할 필요가있었습니다. 나는 복잡한 것들을 피하고 단순히 두 개의 필드를 만들었습니다 :

    비슷한 것을 할 필요가있었습니다. 나는 복잡한 것들을 피하고 단순히 두 개의 필드를 만들었습니다 :

    id_no = models.AutoField(unique=True)
    my_highvalue_id = models.IntegerField(null=True)
    

    views.py에서 id_no에 고정 숫자를 추가하기 만하면됩니다.

    my_highvalue_id = id_no + 1200

    문제를 해결하는 데 도움이되는지 확신 할 수 없지만 쉽게 둘러 볼 수 있다고 생각합니다.

  7. from https://stackoverflow.com/questions/117800/how-to-get-django-autofields-to-start-at-a-higher-number by cc-by-sa and MIT license