장고: 작업 오류 해당 테이블 없음
저는 Django-CMS를 사용하는 Django 프로젝트에서 꽤 간단한 애플리케이션, 연구를 구축하고 있습니다. (프로젝트/애플리케이션에 대한 첫 번째 기초 작업입니다.)주요 목적은 다양한 지적 자산(예: 연구자가 작성한 기사, 책 등)을 저장하는 것입니다.
문제는 제가 브라우저를 가리킬 때/research/다음과 같은 오류가 발생합니다.table 'research_journal' doesn't exist ("no such table").
저는 sqlite3 데이터베이스와 함께 Djnago 1.6.5를 사용하고 있습니다.
을 보고 .python manage.py sql research산출량:
BEGIN;
CREATE TABLE "research_researchbase" (
"id" integer NOT NULL PRIMARY KEY,
"pub_date" datetime NOT NULL,
"authors" varchar(200) NOT NULL,
"year" varchar(25) NOT NULL,
"title" varchar(200) NOT NULL,
"subtitle" varchar(200) NOT NULL,
"image_id" integer NOT NULL REFERENCES "filer_image" ("file_ptr_id"),
"link" varchar(200) NOT NULL
)
;
CREATE TABLE "research_journal" (
"researchbase_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "research_researchbase" ("id"),
"journal" varchar(200) NOT NULL,
"abstract" text NOT NULL,
"citation" varchar(200) NOT NULL
)
;
CREATE TABLE "research_encyclopedia_chapter" (
"researchbase_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "research_researchbase" ("id"),
"encyclopedia" varchar(200) NOT NULL,
"publisher" varchar(200) NOT NULL,
"summary" varchar(200) NOT NULL
)
;
CREATE TABLE "research_book" (
"researchbase_ptr_id" integer NOT NULL PRIMARY KEY REFERENCES "research_researchbase" ("id"),
"publisher" varchar(200) NOT NULL,
"summary" varchar(200) NOT NULL
)
;
COMMIT;
도망쳤어요python manage.py migrate research다음 항목을 가져옵니다.
/Users/XXX/Documents/repos/sfs/env/lib/python2.7/site-packages/app_data/fields.py:2: DeprecationWarning: django.utils.simplejson is deprecated; use json instead.
from django.utils import simplejson as json
Running migrations for research:
- Nothing to migrate.
- Loading initial data for research.
Installed 0 object(s) from 0 fixture(s)
도망쳤어요python manage.py syncdb다음을 확인할 수 있습니다.
Syncing...
Creating tables ...
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
Synced:
> djangocms_admin_style
> django.contrib.auth
> django.contrib.contenttypes
> django.contrib.sessions
> django.contrib.admin
> django.contrib.sites
> django.contrib.sitemaps
> django.contrib.staticfiles
> django.contrib.messages
> mptt
> south
> sekizai
> django_select2
> hvad
Not synced (use migrations):
- djangocms_text_ckeditor
- cms
- menus
- djangocms_style
- djangocms_column
- djangocms_file
- djangocms_flash
- djangocms_googlemap
- djangocms_inherit
- djangocms_link
- djangocms_picture
- djangocms_teaser
- djangocms_video
- reversion
- polls
- djangocms_polls
- aldryn_blog
- easy_thumbnails
- filer
- taggit
- research
(use ./manage.py migrate to migrate these)
여기 있습니다.models.py:
from django.db import models
from django.utils import timezone
from filer.fields.image import FilerImageField
import datetime
class ResearchBase(models.Model):
pub_date = models.DateTimeField('date published')
authors = models.CharField(max_length=200)
year = models.CharField(max_length=25)
title = models.CharField(max_length=200)
subtitle = models.CharField(max_length=200, blank=True)
image = FilerImageField()
link = models.CharField(max_length=200, blank=True)
def __unicode__(self):
return self.title
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Journal(ResearchBase):
journal = models.CharField(max_length=200)
abstract = models.TextField()
citation = models.CharField(max_length=200)
class Encyclopedia_Chapter(ResearchBase):
encyclopedia = models.CharField(max_length=200)
publisher = models.CharField(max_length=200)
summary = models.CharField(max_length=200)
class Book(ResearchBase):
publisher = models.CharField(max_length=200)
summary = models.CharField(max_length=200)
제 여기내입니다.views.py두를 전달하고 하고, 렌더를통두해개전객있습고달다니하체를의▁(있:다(습니▁the렌▁books▁in통▁through▁ignore전,고▁objects달하▁thenote▁class▁that해▁fact▁two▁render)▁the▁i▁i▁that▁deal▁passing▁am▁yet를▁to. 아직 클래스 북을 전체 거래에 포함하지 않았다는 사실은 무시하십시오.)
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, Http404
from django.template import RequestContext, loader
from research.models import Journal, Encyclopedia_Chapter, Book
def research_index(request):
latest_journal_list = Journal.objects.order_by('-pub_date')[:5]
latest_chapter_list = Encyclopedia_Chapter.objects.order_by('-pub_date')[:5]
context = {
'latest_journal_list': latest_journal_list,
'latest_chapter_list': latest_chapter_list
}
return render(request, 'research/index.html', context)
def journal_detail(request, journal_id):
journal = get_object_or_404(Journal, pk=journal_id)
return render(request, 'research/journal_detail.html', {'journal': journal})
def chapter_detail(request, chapter_id):
chapter = get_object_or_404(Encyclopedia_Chapter, pk=chapter_id)
return render(request, 'research/chapter_detail.html', {'chapter': chapter})
지원서는 다음과 같습니다.url.py:
from django.conf.urls import patterns, url
from research import views
urlpatterns = patterns('',
url(r'^$', views.research_index, name='research'),
url(r'^(?P<journal_id>\d+)/$', views.journal_detail, name='journal_detail'),
url(r'^(?P<chapter_id>\d+)/$', views.chapter_detail, name='chapter_detail'),
)
여기 있습니다.index.html템플릿:
{% extends 'research/base.html' %}
{% block research_content %}
<div class="container">
<div class="row featurette">
<h3 id="research">Peer-reviewed Journal Articles</h3>
{% if latest_journal_list %}
<ul id="research">
{% for journal in latest_journal_list %}
<li id="research">
<img src="{{ journal.image.url }}" id="research">
<h4>{{ journal.journal }}</h4>
<h5>{{ journal.title }}</h5>
<a href="{% url 'research:journal_detail' journal.id %}">Read More</a>
</li>
{% endfor %}
</ul>
{% else %}
<p>No journals are available.</p>
{% endif %}
</div>
<div class="row featurette">
<h3 id="research">Encyclopedia Chapters</h3>
{% if latest_chapter_list %}
<ul id="research">
{% for chapter in latest_chapter_list %}
<li id="research">
<img src="{{ chapter.image.url }}" id="research">
<h4>{{ chapter.journal }}</h4>
<h5>{{ chapter.title }}</h5>
<a href="{% url 'research:chapter_detail' chapter.id %}">Read More</a>
</li>
{% endfor %}
</ul>
{% else %}
<p>No encyclopedia chapters are available.</p>
{% endif %}
</div>
</div>
{% endblock %}
혹시 모르니까 여기 제가.cms_app.py:
from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _
class ResearchApp(CMSApp):
name = _("Research App")
urls = ["research.urls"]
app_name = "research"
apphook_pool.register(ResearchApp)
사용:
python manage.py migrate --run-syncdb
Benyamin Jafari의 이 논평에 언급된 바와 같이:
--run-syncdb마이그레이션이 없는 앱에 대한 테이블을 만듭니다.
또한 앱 경로를 지정하는 것을 잊지 마십시오.예:
python manage.py makemigrations app
python manage.py migrate app
장고 1.10의 경우, 당신은 아마도 해야 할 것입니다.python manage.py makemigrations appname.
제안된 항목 중 하나라도 발견되는 경우:
python manage.py makemigrations
python manage.py migrate
python manage.py migrate --run-syncdb
실패하면 "라는 이름의 폴더를 추가해야 할 수 있습니다.migrations빈 앱토리내빈파생성합다니을일에서디렉▁an다▁inside▁empty니생▁the,합▁and를 생성합니다.__init__.pyjava.
제 마이그레이션에 문제가 있었던 것 같습니다.
도망친./manage.py schemamigration research --auto기본값이 지정되지 않은 필드가 많습니다.
그래서 나는 뛰었습니다../manage.py schemamigration research --init에 뒤에./manage.py migrate research
거기서 서버를 다시 실행하는 것이 성공했습니다.
이 문제는 마이그레이션을 실행하여 해결할 수 있습니다.
python manage.py makemigrationspython manage.py migrate
에서 변경할 때마다 위의 작업을 수행합니다.models.py.
한 테이블 따라서 먼저 cmd에 다음과 같이 write 명령을 사용합니다.python manage.py makemigrations그런 명령에 의해 합니다.python manage.py migrate
다음 명령을 실행하여 이 문제를 해결했습니다.
python manage.py migratepython manage.py makemigrationspython manage.py makemigrations appName
아래에서 이 명령을 실행합니다.
"--run-syncdb"가 있는 "migration"은 마이그레이션이 없는 앱에 대한 테이블을 만듭니다.
python manage.py migrate --run-syncdb
다음은 "--run-syncdb"를 사용한 "마이그레이션"에 대한 전체 설명입니다.
--run-syncdb
마이그레이션 없이 앱에 대한 테이블을 만들 수 있습니다.권장되지는 않지만 수백 개의 모델이 있는 대규모 프로젝트에서는 마이그레이션 프레임워크가 너무 느릴 수 있습니다.
"--run-syncdb"를 사용하여 "마이그레이션"에 대한 장고 문서를 확인할 수 있습니다.
관리자 패널로 이동했을 때 동일한 오류가 발생했습니다.은 대신 을 실행해야 대신이실합니다야해행걸합:.python manage.py migrate --run-syncdb마이그레이션을 포함하는 것을 잊지 마십시오. 이란:
python manage.py make migrations그리고 나서.python manage.py migrate
그래도 오류가 지속되었을 때 위의 제안된 명령으로 시도했습니다.
저는 Django 1.9, SQLite3, Django CMS 3.2를 사용하고 있으며 동일한 문제가 있었습니다.뛰어서 해결했습니다.python manage.py makemigrations이후 데이터베이스에 null이 아닌 값 유형이 포함되어 있지만 기본값이 설정되어 있지 않다는 메시지가 표시됩니다.그것은 제게 두 가지 옵션을 주었습니다. 1) 지금 하나의 off 값을 선택하거나 2) 종료하고 models.py 의 기본 설정을 변경하는 것입니다.첫 번째 10을 지정했습니다.완료되었다는 메시지가 표시될 때까지 네다섯 번 반복했습니다.나는 그 다음에 달렸습니다.python manage.py migrate이제는 잘 작동합니다. 기하라것, 는은리를 으로써.python manage.py makemigrations먼저, 데이터베이스의 수정된 복사본이 생성되고(내 복사본은 0004), 언제든지 이전 데이터베이스 상태로 되돌릴 수 있습니다.
이의 맨 답을 , 문제를 해 줄 합니다:), 나는 , makemigrations그리고.migrate
그래서 저는 이 링크의 모든 것을 재설정하는 방법에 대한 매우 상세한 답변을 받았습니다.
나에게 도움이 된 것:
- models.py 에서 클래스를 추가하지 않으면 마이그레이션 폴더에서 어떤 마이그레이션이 테이블을 생성했는지 확인합니다.
- .py 에 한다면, 를 삭제하고 " models.py "를 실행해 .
python manage.py makemigrations <appname> - 그리고 리고가짜마이레이그션을그마하는션동이이레안다인오있삭을 사용하여 을 찾을 수 말할 수 .
python manage.py migrate <yourappname> --fake - 추가하고 을 다시 합니다.
python manage.py makemigrations <appname>. - 으로 다시 .
python manage.py migrate <appname>
나한테 일어난 일.일반적으로 각 개별 변경사항이 올바르게 적용되었는지 여부를 확인하지 않고 많은 변경사항을 수행할 때 발생합니다(표/표 작성에서 변경할 때마다 마이그레이션 및 마이그레이션 사용).
이제 당신이 시도할 수 있는 것은 -
- python manage.py 마이그레이션(앱 이름)
- python manage.해적판 이주
- python manage.pymake 마이그레이션(앱 이름)
위에서 설명한 내용이 효과가 없었더라도 앱 폴더 내의 마이그레이션 폴더로 이동한 다음 오류가 발생했을 수 있는 파일을 삭제할 수 있습니다(마이그레이션할 때마다 변경 사항, 새 테이블을 반영하기 위해 새 파일이 여기에 추가됩니다).따라서 해당 파일을 찾아서 삭제하면 오류가 발생할 수 있습니다.다시 마이그레이션을 적용하고 마이그레이션을 수행합니다.
작동하지 않더라도 아래 코드가 작동할 수 있습니다.
python manage.py 마이그레이션 --run-syncdb
위의 세 가지 사항이 마침내 작동하지 않더라도 테이블을 저장하는 db.sqlite3 파일을 삭제하고 다른 db.sqlite3를 생성하면 됩니다(물론 vs code나 pycharm 또는 다른 코딩 환경을 사용하면 컴퓨터가 텍스트 파일을 만들 수 있습니다).그런 다음 다른 db.splite3을 생성한 후,
python manage.py 마이그레이션(앱 이름)
python manage.해적판 이주
python manage.pymake 마이그레이션(앱 이름)
이것은 나에게 일어났고 나에게 그것은 내가 추가했기 때문입니다.db.sqlite3저장소에서 추적되지 않음.추가해서 서버에 밀어넣어서 제대로 작동했습니다. makemigartions그리고.migrate이 일을 한 후에
경우 하고, 를 실행하여 (을 실제로)했습니다.reset_dbDjango-Extensions에서 명령:
python manage.py reset_db
그런 다음 다음 명령을 실행했습니다.
python manage.py makemigrationspython manage.py migrate
터미널을 닫고 다시 터미널을 열고 다음 명령을 실행합니다.
python manage.py migrate (app name)python manage.py makemigrationspython manage.py makemigrations (appname)
저는 장고 1.8과 함께 장고 CMS 3.4를 사용하고 있습니다.장고 CMS 코드의 근본 원인을 살펴봤습니다.근본 원인은 Django CMS가 데이터베이스를 호출하기 전에 SQLite3 데이터베이스가 포함된 파일이 있는 디렉터리로 디렉터리를 변경하지 않기 때문입니다.오류 메시지가 거짓입니다.근본적인 문제는 SQLite 데이터베이스 호출이 잘못된 디렉토리에서 이루어졌다는 것입니다.
해결 방법은 작업 디렉터리로 변경할 때 모든 Django 응용 프로그램이 디렉터리를 Django Project 루트 디렉터리로 다시 변경하도록 하는 것입니다.
모든 항목을 정리하고 다시 만듭니다.
예.
내 프로젝트의 루트 폴더는 다음과 같습니다.
/media/ubuntu/shareddir1/django001/캐릭터_SW/캐릭터_SW/
i. Delete your database (db.sqlite3 in my case) in your project directory
/media/ubuntu/shareddir1/django001/Character_SW/Character_SW/
find . | grep -i db.sqlite3
rm -Rvf ./db.sqlite3
rm -Rvf ./*/db.sqlite3
rm -Rvf ./*/*/db.sqlite3
rm -Rvf ./*/*/*/db.sqlite3
rm -Rvf ./*/*/*/*/db.sqlite3
find . | grep -i db.sqlite3
i. Remove everything from __pycache__ folder under your project subdirectory
cd /media/ubuntu/shareddir1/django001/Character_SW/Character_SW/
find . | grep -i pycache
rm -Rvf ./__pycache__
rm -Rvf ./*/__pycache__
rm -Rvf ./*/*/__pycache__
rm -Rvf ./*/*/*/__pycache__
rm -Rvf ./*/*/*/*/__pycache__
find . | grep -i pycache
i. For the application you are trying to fix, go to the folder and clear migrations directory
find . | grep -i migrations
rm -Rvf ./migrations
rm -Rvf ./*/migrations
rm -Rvf ./*/*/migrations
rm -Rvf ./*/*/*/migrations
rm -Rvf ./*/*/*/*/migrations
find . | grep -i migrations
i. re create table etc
cd /media/ubuntu/shareddir1/django001/Character_SW/Character_SW/
python3 manage.py makemigrations
python3 manage.py migrate
python manage.py migrate --run-syncdb
#python3 manage.py createsuperuser
python3 manage.py runserver
이 문제에 대한 일부 해결책이 제공되더라도 이 오류가 나타나는 일반적인 오류는 언급할 가치가 있습니다.
- 마이그레이션을 수행하면 필요한 마이그레이션 파일이 생성됩니다.그러나 실제 테이블은 아직 데이터베이스에 채워지지 않았습니다.
- 데이터베이스에서 작성 테이블을 마이그레이트합니다.
이 두 명령이 성공적으로 완료될 때까지 데이터베이스에 테이블이 없습니다.
따라서 이 오류의 가장 일반적인 이유는 위의 두 명령을 성공적으로 실행하기 전에 일부 데이터베이스 테이블/레코드에 액세스하려고 시도하는 것입니다.예를 들어 보겠습니다.
- 저는 롤이라는 모델이 있습니다.
- 마이그레이션 만들기 또는 마이그레이션 명령을 아직 실행하지 않았습니다.
- 그리고 저는 아래와 같은 forms.py 파일을 가지고 있습니다.
forms.py
def get_roles():
roles = [(role, role) for role in Role.objects.all()]
return roles
class UserRegisterForm(UserCreationForm):
role = forms.ChoiceField(choices=get_roles())
makemigrations 명령을 실행하려고 하면 OperationalError라는 예외가 발생합니다. get_role() 함수에서 역할 모델과 함께 데이터베이스 레코드를 로드하려고 하지만 해당 테이블이 데이터베이스에 아직 없기 때문입니다.
makemigrations 명령을 실행할 때 이 명령어는 제 forms.py 파일을 읽고 아직 존재하지 않는 Role 모델에서 데이터를 로드하려고 했습니다.
이러한 오류를 방지하려면 예외를 처리하지 않고 데이터베이스에 액세스하지 않아야 합니다.models.py, forms.py, views.py 또는 코드의 어느 곳에서나 실수로 이러한 종류의 실수를 저지를 수 있습니다.
그렇지 않으면 마이그레이션 만들기 및 마이그레이션 명령을 실행하기 전에 syncdb 명령을 사용해야 합니다.
언급URL : https://stackoverflow.com/questions/25771755/django-operationalerror-no-such-table
'programing' 카테고리의 다른 글
| bash에 대한 별칭의 여러 명령 (0) | 2023.05.14 |
|---|---|
| VS Code Azure 계정 확장을 통해 계정을 전환하는 방법 (0) | 2023.05.14 |
| 각도 재료의 기본 정렬 - 머리글 정렬 (0) | 2023.05.14 |
| 문자열을 별도의 변수로 분할 (0) | 2023.05.14 |
| MongoDB 캐시 시스템 이해 (0) | 2023.05.14 |