#python-3.x #django #postgresql #django-models
#python-3.x #django #postgresql #django-модели
Вопрос:
Итак, я получаю некоторые ошибки при попытке запустить «python3 manage.py совершайте миграции». Небольшой фрагмент ошибок выглядит следующим образом:
Traceback (most recent call last):
File "/home/vincentqchen/.venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
psycopg2.errors.UndefinedTable: relation "catalog_video" does not exist
LINE 1: INSERT INTO "catalog_video" ("url", "title", "length", "view...
^
Это моя папка models:
from django.db import models
import os
from datetime import datetime
#Google api
import json
from googleapiclient.discovery import build
#Scheduler
from apscheduler.schedulers.background import BackgroundScheduler
class Video(models.Model):
#youtube_cache = models.ForeignKey(YoutubeCache,on_delete=models.CASCADE)
url = models.CharField(max_length=600, null=False, blank=False)
title = models.CharField(max_length=600, null=False, blank=False)
length = models.CharField(max_length=600, null=False, blank=False)
views = models.IntegerField(null=False, blank=False)
date = models.DateField(auto_now=False, auto_now_add=False)
ytType = models.CharField(max_length=30, null=False, blank=False)
# Create your models here.
def ytCacheHelper():
youtube = build('youtube','v3',developerKey = Secret)
#Most popular videos in the us
YTrequest = youtube.videos().list(
part="snippet,contentDetails,statistics",
chart="mostPopular",
regionCode="US"
)
response = YTrequest.execute()
#Python dictionary of all top yt videos
items = response['items']
for x in range(len(items)):
# Parts of video
snippet = items[x]['snippet']
contentDetails = items[x]['contentDetails']
statistics = items[x]['statistics']
# Figure out length of video
length = contentDetails['duration']
length = length[2:]
#Figure out date of video
date = snippet['publishedAt']
year = int(date[:4])
month = int(date[5:7])
day = int(date[8:10])
hour = int(date[11:13])
minute = int(date[14:16])
date = datetime(year, month, day, hour, minute)
# Set up the video model
mostViewedVideo = Video(url='https://www.youtube.com/watch?v=' items[x]['id'], title=snippet['title'], length=length, views=statistics['viewCount'], date=date, ytType='mostPopular')
mostViewedVideo.save()
#Schedule daily database updates
scheduler = BackgroundScheduler()
scheduler.add_job(ytCacheHelper, 'interval', seconds=3)
scheduler.start()
У меня запущен планировщик для получения информации от yt каждый день (для целей тестирования он установлен на 3 секунды). Я подумал, что, возможно, ytCacheHelper вызывает проблемы, поэтому я прокомментировал это и переделал миграции. К сожалению, postgres все еще не создал таблицу. Я попытался удалить всю свою базу данных и повторить миграции, но это не сработало. Он по-прежнему выдавал мне те же ошибки.
Вот файл миграции
# Generated by Django 3.1.4 on 2021-01-08 04:26
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Video',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('url', models.CharField(max_length=600)),
('title', models.CharField(max_length=600)),
('length', models.CharField(max_length=600)),
('views', models.IntegerField()),
('date', models.DateField()),
('ytType', models.CharField(max_length=30)),
],
),
]
РЕДАКТИРОВАТЬ — я не знаю, как это работает, но я просто изменил название своей модели, а затем переделал миграции, и это каким-то образом сработало.
РЕДАКТИРОВАТЬ 2 — Это как-то снова сломалось. Я так запутался. Я меняю свои модели и запускаю makemigrations, и он говорит, что никаких изменений не было сделано. И я снова получаю одни и те же ошибки. Моя папка migrations также больше не существует.
Комментарии:
1. В
Catalog_Video
вашем model.py … происходит ли это после редактирования вашего models.py ?2. удаление предыдущей миграции сработало бы