Django Remove DB (управление миграцией Python)

Я использую Джанго.

После запуска миграции управления Python БД создается нормально. Однако через некоторое время БД внезапно исчезает. Команда drop не существует в моем коде.

Мне любопытно, почему БД удалена. Все данные удалены. (БД, Коллекция, Поле)

Кто-нибудь знает причину?

Это мой код

ниже кода — приложение/модели

модель

from djongo import models

class RealTime(models.Model):
    _id = models.CharField(max_length=255, primary_key=True)
    site = models.CharField(max_length=125)
    title = models.CharField(max_length=255)
    url = models.URLField()
    create_time = models.DateTimeField()
    GPTAnswer = models.TextField()
    
    class Meta:
        db_table = 'realtimebest'

class Daily(models.Model):
    rank = models.IntegerField()
    title = models.CharField(max_length=255)
    url = models.URLField()
    create_time = models.DateTimeField()

Ниже приведен код схемы:

схема

import graphene
from graphene_django.types import DjangoObjectType
from graphene import Mutation

from .views import board_summary
from .communityWebsite.models import RealTime, Daily

class RealTimeType(DjangoObjectType):
    class Meta:
        model = RealTime

class DailyType(DjangoObjectType):
    class Meta:
        model = Daily

class Query(graphene.ObjectType):
    all_realtime = graphene.List(RealTimeType)
    all_daily = graphene.List(DailyType)

    def resolve_all_realtime(self, info, **kwargs):
        return RealTime.objects.all()

    def resolve_all_daily(self, info, **kwargs):
        return Daily.objects.all()

class SummaryBoardMutation(Mutation):
    class Arguments:
        board_id = graphene.String(required=True)

    response = graphene.String()

    def mutate(self, info, board_id):
        response = board_summary(board_id)
        return SummaryBoardMutation(response=response)

class Mutation(graphene.ObjectType):
    summary_board = SummaryBoardMutation.Field()

schema = graphene.Schema(query=Query, mutation=Mutation)

settings.py

# Application definition
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
     "corsheaders",

    # Graph QL
    'graphene_django',
    'graphene_mongo',
    
    'webCrwaling',
    'kingwangjjang',
    'chatGPT'
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'kingwangjjang.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 'DIRS': [],
        "DIRS": [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'kingwangjjang.wsgi.application'

# Database
# MongoDB settings
DB_URI = 'mongodb://'+ DB_HOST + '/' + DB_USER + ':' + DB_PASSWORD
DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': DB_NAME,
        'ENFORCE_SCHEMA': True,
        'CLIENT': {
            'host': DB_URI
        }  
    }
}

# Password validation
# https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/5.0/topics/i18n/

LANGUAGE_CODE = 'ko-kr'

TIME_ZONE = 'Asia/Seoul'

USE_I18N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.0/howto/static-files/

STATIC_URL = 'static/'

# Default primary key field type
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

# GRAPHENE = {
#     "SCHEMA": "webCrwaling.schema.schema"
# }

Вставить данные

def get_real_time_best(self):
    req = requests.get('https://www.dcinside.com/', headers=self.g_headers[0])
    html_content = req.text
    soup = BeautifulSoup(html_content, 'html.parser')
    li_elements = soup.select('#dcbest_list_date li')
    already_exists_post = []

    for li in li_elements:
        p_element = li.select_one('.box.besttxt p')
        a_element = li.select_one('.main_log')
        time_element = li.select_one('.box.best_info .time')

        if p_element and a_element and time_element:
            p_text = p_element.get_text(strip=True)
            a_href = a_element['href']
            no_value = a_href.split('no=')[-1]
            time_text = time_element.get_text(strip=True)

            if (time_text.find('-') > 0): 
                break  # 오늘 것만 추가 (이전 글은 제외 (DB에서 확인))

            # 시간 13:40 -> 2024.01.29 13:40 로 수정
            now = datetime.now()
            hour, minute = map(int, time_text.split(':'))
            # 시간 설정 및 datetime 객체 생성
            target_datetime = datetime(now.year, now.month, now.day, hour, minute)

            try:
                existing_instance = RealTime.objects.filter(_id=no_value).first()
                if existing_instance:
                    already_exists_post.append(no_value)
                    continue
                else:
                    RealTime.objects.get_or_create(
                        _id=no_value,
                        defaults = {
                            'site' : 'dcinside',
                            'title': p_text,
                            'url': a_href,
                            'create_time': target_datetime,
                            'GPTAnswer': DEFAILT_GPT_ANSWER
                        }
                    )
            except IntegrityError:
                continue

    print("already exists post", already_exists_post)

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' Может ли это быть проблемой?

Какую часть необходимо изменить, чтобы решить проблему полного исчезновения данных?

  1. Часовой пояс = Ложь

Но Python manage migrate это нормально

Что вы имеете в виду под «проблемой полного исчезновения данных»?

AKX 11.04.2024 13:46

Каждый раз, когда вы меняете поля модели, вам также необходимо изменить схему базы данных: запуск python manage.py makemigrations подготавливает рецепт для этих изменений, а python manage.py migrate применяет этот рецепт к базе данных.

Matija Sirk 11.04.2024 14:04

База данных удалена..

이환주 12.04.2024 01:58

Я всегда так делаю.

이환주 12.04.2024 01:59

Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Поскольку сейчас написано, трудно точно сказать, о чем вы спрашиваете.

Community 12.04.2024 03:40

Нет, python manage.py migrate не удалит вашу базу данных.

AKX 12.04.2024 08:49

Он отредактирован: «Мне любопытно, почему БД удалена. Все данные удалены. (БД, Коллекция, Поле)»

이환주 12.04.2024 08:55

Привет, не могли бы вы вставить ошибку, это даст лучшее представление о том, о чем вы говорите?

shivankgtm 12.04.2024 08:55

Я не знаю.. Когда БД удалили

이환주 12.04.2024 08:57

Никаких сообщений об ошибках. Я не думаю, что есть даже какое-то конкретное время. Возможно, это ситуация, с которой я не знаком.

이환주 12.04.2024 08:58

Команда migrate не удаляет вашу базу данных, если у вас нет миграции, которая делает это. Не совсем понятно, о чем вы здесь спрашиваете. Уточните, пожалуйста, в чем конкретно проблема.

Abdul Aziz Barkat 12.04.2024 08:59

Исправил пост. Извините за путаницу в содержании.

이환주 12.04.2024 09:02

Возможно, было бы лучше, если бы вы прочитали документацию по миграции и поняли это, прежде чем редактировать свой вопрос. Как сейчас спрашивают, мы понятия не имеем, в чем проблема.

Abdul Aziz Barkat 12.04.2024 09:02

Что говорит журнал БД? Это будет отправной точкой для расследования!

jlandercy 12.04.2024 11:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
14
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я добавил процесс аутентификации в mongodb, который решил проблему исчезновения базы данных. Проверка журнала, как предложено в комментариях, позволила мне найти это решение.

Другие вопросы по теме