Django 1.7迁移:django.db.utils.OperationalError:没有这样的表:db_trans_language [英] Django 1.7 migrations: django.db.utils.OperationalError: no such table: db_trans_language
问题描述
以下是发生的情况:
- 我删除所有(潜在)错误的迁移从应用程序
- 我运行makemigrations
- 我运行迁移
- 我看到以下错误:
错误:
C :\Users\Sverker\Dropbox\Picrates> python manage.py makemigrations db_trans
C:\Users\Sverker\Dropbox\Picrates\picrates_project
'db_trans'的迁移:
0001_initial.py:
- 创建模型语言
- 创建模型标记
- 创建模型字符串
- 创建模型TransMarkup
- 创建模型TransString
- 将字段trans_string添加到字符串
- 为字符串(1个约束)更改unique_together
- 将字段trans_markup添加到标记
- 更改unique_together用于标记(1个约束) )
C:\Users\Sverker\Dropbox\Picrates> pyt hon manage.py migrate
C:\Users\Sverker\Dropbox\Picrates\picrates_project
要执行的操作:
同步未迁移的应用程序:allauth,linkedin_oauth2,crispy_forms
应用所有迁移:account,sessions,admin,db_trans,sites,auth,contenttypes,parties,ped,socialaccount
同步不需要迁移的应用程序:
创建表...
安装自定义SQL。
安装索引...
运行迁移:
应用db_trans.0001_initial ...追溯(最近的最后一次调用):
文件manage.py,第15行,< module>
execute_from_command_line(sys.argv)
文件C:\Python27\lib\site- packages\django\core\management\__init __。py,第385行,在execute_from_command_line
utility.execute()
文件C:\Python27\lib\site- packages\django\core\management\__init __。py,第377行,执行
self.fetch_command(子命令).run_from_argv(self.argv)
文件C:\Python27\lib\site- packages\django\core\management\base.py ,line 288,in run_from_argv
self.execute(* args,** options .__ dict__)
文件C:\Python27\lib\site-packages\django\core\ management\base.py,第338行,执行
output = self.handle(* args,** options)
文件C:\Python27\lib\site- packages\\ \\ django\core\management\commands\migrate.py,第161行,处理
executor.migrate(targets,plan,fake = options.get( fake,False))
文件C:\Python27\lib\site- packages\django\db\migrations\executor.py,第68行迁移
self.apply_migration(migration,fake = fake)
文件C:\Python27\lib\site-packages\django\db\migrations\executor.py,第102行apply_migration
migration.apply(project_state,schema_editor)
文件C:\Python27\lib\site-packages\django\db\migrations\migration.py,第108行,应用
operation.database_forwards(self.app_label,schema_editor,project_state,new_state)
文件C:\Python27\lib\site- packages\django\db\migrations\\ \\operations\models.py,第36行,在database_forwards
schema_editor.create_model(model)
文件C:\Python27\lib\site-packages\django\db\\ \\ backends \schema.py,第213行,在create_model
定义中,extra_params = self .column_sql(model,field)
文件C:\Python27\lib\site-packages\django\db\backends\schema.py,第125行,column_sql
default_value = self.effective_default(field)
文件C:\Python27\lib\site-packages\django\db\backends\schema.py,第175行,在effective_default
default = field.get_default()
文件C:\Python27\lib\site- packages\django\db\models\fields\__init __。py,第719行,in get_default
return self.default()
文件C:\Users\Sverker\Dropbox\Picrates\db_trans\models.py,第9行,在get_default_priority
max = Language.objects.all()。aggregate(models.Max(fallback_priority))[fallback_priority__max]
文件C:\Python27\lib\site-packages\django \db\models\query.py,第325行,汇总
return query.get_aggregation(using = self.db,force_subq = force_subq)
文件C:\Python27\lib\site-packages\django\db\models\sql\query.py,第402行,get_aggregation
结果= query.get_compiler(using).execute_sql(SINGLE)
文件C:\Python27\lib\site- packages\django\db\models\sql\compiler.py,行786,在execute_sql
cursor.execute(sql,params)
文件C:\Python27\lib\site-packages\django\db\backends\utils.py ,第81行,执行
return super(CursorDebugWrapper,self).execute(sql,params)
文件C:\Python27\lib\site-packages\django\db \backends\utils.py,行65,执行
return self.cursor.execute(sql,params)
文件C:\Python27\lib\site- packages\\ \\ django\db\utils.py,第94行,__exit__
six.reraise(dj_exc_type,dj_exc_value,traceback)
文件C:\Python27\lib\site-pac kages\django\db\backends\utils.py,第65行,执行
return self.cursor.execute(sql,params)
文件C:\Python27\行485,执行
return Database.Cursor.execute(self,query,params)
django.db.utils.OperationalError:没有这样的表:db_trans_language
这是创建的迁移: / p>
# - * - 编码:utf-8 - * -
从__future__导入unicode_literals
从django.db导入模型,迁移
import markupfield.fields
import db_trans.models
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.CreateModel(
name ='Language',
fields = [
('id',models.AutoField(verbose_name ='ID',serialize = False,auto_creat ed = True,primary_key = True)),
('code',models.CharField(max_length = 3)),
('language',models.CharField(max_length = 50)),
('is_public',models.BooleanField(default = False)),
('fallback_priority',models.PositiveIntegerField(default = db_trans.models.get_default_priority,help_text = b'Lowest value将是第一个回退语言。 ',unique = True)),
],
options = {
},
bases =(models.Model,),
),
migrations.CreateModel(
name ='Markup',
fields = [
('id',models.AutoField(verbose_name ='ID',serialize = False,auto_created = True,primary_key =真的)),
('markup',markupfield.fields.MarkupField()),
('markup_markup_type',models.CharField(default = b'markdown',max_length = 30,editable = False,选择= [(b ',b' - '),(b'html',b'html'),(b'plain',b'plain'),(b'markdown',b'markdown')])),
('_markup_rendered',models.TextField(editable = False)),
('language',models.ForeignKey(to ='db_trans.Language')),
],
options = {
},
bases =(models.Model,),
),
migrations.CreateModel(
name ='String',
fields = [
('id',models.AutoField(verbose_name ='ID',serialize = False,auto_created = True,primary_key = True)),
('string',models.CharField(max_length =
('language',models.ForeignKey(to ='db_trans.Language')),
],
options = {
},
bases =(models.Model,),
),
migrations.CreateModel(
name ='TransMarkup',
fields = [
('id',models.AutoField(verbose_name ='ID',serialize = False,auto_created = True,primary_key = True)),
('key',models.CharField = True,max_length = 50,db_index = True)),
('verbose_name',models.CharField(max_length = 200,null = True,blank = True)),
],
options = {
'verbose_name':'Translated Markup',
},
bases =(models.Model,),
),
migrations.CreateModel(
name ='TransString',
fields = [
('id',models.AutoField(verbose_name ='ID',serialize = False,auto_created = True,primary_key = True)),
('key',models.CharField(unique = True,max_length = 50,db_index = True)),
('verbose_name',models.CharField(max_length = 200,null = True,blank = True )),
],
options = {
'verbose_name':'Translated String',
},
bases =(models.Model,),
),
migrations.AddField(
model_name ='string',
name ='trans_string',
field = models.ForeignKey(related_name ='strings',to ='db_trans.TransString'),
preserve_default = True,
),
migrations.AlterUniqueTogether(
name ='string',
unique_together = set([('trans_string','language')]),
)
migrations.AddField(
model_name ='markup',
name ='trans_markup',
field = models.ForeignKey(related_name ='markups',to ='db_trans.TransMarkup '),
preserve_default = True,
),
migrations.AlterUniqueTogether(
name ='markup',
unique_together = set([('trans_mar kup','language')]),
),
]
models.py:
from django.db import models
from django.template.loader import render_to_string
从django.utils.translation import get_language
from markupfield.fields import MarkupField
def get_default_priority():
max = Language.objects.all()。 (models.Max(fallback_priority))[fallback_priority__max]
如果最大值:
返回最大值+ 10
返回50
类语言(models.Model):
code = models.CharField(
max_length = 3,
null = False,
blank = False,
)
language = models.CharField(
max_length = 50,
)
is_public = models.BooleanField(
default = False,
)
fallback_priority = models.PositiveIntegerField(
null = False,
unique = True,
default = get_default_priority,
help_text =最低值将是第一个备用语言
)
def __unicode __(self):
unicode = self.code
if self.language:
unicode + = u - + self.language
return unicode
class TransPhrase(models.Model):
key = models.CharField(
max_length = 50,
unique = True,
null = False,
blank = False,
db_index = True,
)
verbose_name = models.CharField(
max_length = 200,
null = True,
blank = True,
)
@classmethod
def get_translation(cls,key,description = None):
trans_phrase,created = cls.objects.get_or_create(key = key)
如果没有描述:
trans_phrase.verbose_name = description
trans_phrase.save()
return trans_phrase
def render(self,wrap,csrf_token):
raise NotImplementedError
class Meta:
abstract = True
class TransMarkup(TransPhrase) :
def get_trans(self,language_code,use_fallback = True):
try:
return self.markups.get(language__code = language_code)
除了Markup.DoesNotExist:
如果use_fallback:
fallback_markups = self.markups.all()。order_by(language__fallback_priority)
如果fallback_markups:
return fallback_markups [0]
language = Language.objects.get(code = language_code)
return Markup(trans_markup = self,language = language)
def __unicode __(self):
return u[+ self .key + u]
def render(self,wrap,csrf_token):
from db_trans.forms import SetTransMarkupForm
markup = self.get_trans(get_language (),use_fallb ack =(not wrap))
如果wrap:
context = {
csrf_token:csrf_token,
form:SetTransMarkupForm(instance = markup),
trans_markup:标记
}
返回render_to_string(db_trans / set_markup.html,上下文)
else:
return markup
class Meta:
verbose_name =Translated Markup
class Markup(models.Model):
markup = MarkupField(
markup_type =markdown
)
trans_markup = models.ForeignKey(
TransMarkup,
null = False,
related_name =markups,
)
language = models.ForeignKey(
语言,
null = False,
)
def __unicode __(self):
如果self.markup $ deb
return self.markup.rendered
return u[+ self.trans_markup.key + u]
class Meta:
unique_together =(trans_markup,language)
class TransString(TransPhrase):
def get_trans ,language_code,use_fallback = True):
try:
return self.strings.get(language__code = language_code)
除了String.DoesNotExist:
如果use_fallback:
fallback_strings = self.strings.all()。order_by(language__fallback_priority)
如果fallback_strings:
返回fallback_strings [0]
语言= Language.objects.get(code = language_code )
return String(trans_string = self,language = language)
def render(self,wrap,csrf_token):
from db_trans.forms import SetTransStringForm
string = self.get_trans(get_language(),use_fallback =(not wrap))
如果wrap:
context = {
csrf_token:csrf_token,
form:SetTransStringForm(instance = string),
trans_string:string
}
返回render_to_string(db_trans / set_string.html,上下文)
else:
return string
class Meta:
verbose_name =Translated String
class String(models.Model):
string = models.CharField(
max_length = 256
)
trans_string = models.ForeignKey(
TransString,
null = False,
related_name =strings
)
language = models.ForeignKey(
语言,
null = False,
)
def __unicode __(self):
if self.string:
return self.string
return u[+ self.trans_string.key + u]
class Meta:
unique_together =(trans_string,language)
帮助将是伟大的我知道这是一个古老的问题,但最近我有一个类似错误。进攻线可能是:
文件C:\Users\Sverker\Dropbox\Picrates\db_trans\\ \\ models.py,第9行,get_default_priority
max = Language.objects.all()。aggregate(models.Max(fallback_priority))[fallback_priority__max]
所以这里,您使用 Language.objects.all()
查询数据库。这个行在迁移实际运行之前执行,而 models.py
和数据库本身之间仍然不一致。
尝试注释掉该行(以及其他对 max
的引用),然后重新运行迁移。这对我有用。
I'm working on a django project and have had some migration troubles in my (test)prod setting and as a consequence have I dumped all relevant data and I am now in the process of setting up the database from scratch.
Here is what happens:
- I remove all (potentially) faulty migrations from the app
- I run makemigrations
- I run migrate
- I am presented with the following error:
Error:
C:\Users\Sverker\Dropbox\Picrates>python manage.py makemigrations db_trans
C:\Users\Sverker\Dropbox\Picrates\picrates_project
Migrations for 'db_trans':
0001_initial.py:
- Create model Language
- Create model Markup
- Create model String
- Create model TransMarkup
- Create model TransString
- Add field trans_string to string
- Alter unique_together for string (1 constraint(s))
- Add field trans_markup to markup
- Alter unique_together for markup (1 constraint(s))
C:\Users\Sverker\Dropbox\Picrates>python manage.py migrate
C:\Users\Sverker\Dropbox\Picrates\picrates_project
Operations to perform:
Synchronize unmigrated apps: allauth, linkedin_oauth2, crispy_forms
Apply all migrations: account, sessions, admin, db_trans, sites, auth, contenttypes, parties, ped, socialaccount
Synchronizing apps without migrations:
Creating tables...
Installing custom SQL...
Installing indexes...
Running migrations:
Applying db_trans.0001_initial...Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 385, in execute_from_command_line
utility.execute()
File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line 377, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Python27\lib\site-packages\django\core\management\base.py", line 288, in run_from_argv
self.execute(*args, **options.__dict__)
File "C:\Python27\lib\site-packages\django\core\management\base.py", line 338, in execute
output = self.handle(*args, **options)
File "C:\Python27\lib\site-packages\django\core\management\commands\migrate.py", line 161, in handle
executor.migrate(targets, plan, fake=options.get("fake", False))
File "C:\Python27\lib\site-packages\django\db\migrations\executor.py", line 68, in migrate
self.apply_migration(migration, fake=fake)
File "C:\Python27\lib\site-packages\django\db\migrations\executor.py", line 102, in apply_migration
migration.apply(project_state, schema_editor)
File "C:\Python27\lib\site-packages\django\db\migrations\migration.py", line 108, in apply
operation.database_forwards(self.app_label, schema_editor, project_state, new_state)
File "C:\Python27\lib\site-packages\django\db\migrations\operations\models.py", line 36, in database_forwards
schema_editor.create_model(model)
File "C:\Python27\lib\site-packages\django\db\backends\schema.py", line 213, in create_model
definition, extra_params = self.column_sql(model, field)
File "C:\Python27\lib\site-packages\django\db\backends\schema.py", line 125, in column_sql
default_value = self.effective_default(field)
File "C:\Python27\lib\site-packages\django\db\backends\schema.py", line 175, in effective_default
default = field.get_default()
File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py", line 719, in get_default
return self.default()
File "C:\Users\Sverker\Dropbox\Picrates\db_trans\models.py", line 9, in get_default_priority
max = Language.objects.all().aggregate(models.Max("fallback_priority"))["fallback_priority__max"]
File "C:\Python27\lib\site-packages\django\db\models\query.py", line 325, in aggregate
return query.get_aggregation(using=self.db, force_subq=force_subq)
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py", line 402, in get_aggregation
result = query.get_compiler(using).execute_sql(SINGLE)
File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 786, in execute_sql
cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\utils.py", line 81, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\utils.py", line 65, in execute
return self.cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\utils.py", line 94, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Python27\lib\site-packages\django\db\backends\utils.py", line 65, in execute
return self.cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py", line 485, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: db_trans_language
Here is the created migration:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import markupfield.fields
import db_trans.models
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.CreateModel(
name='Language',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('code', models.CharField(max_length=3)),
('language', models.CharField(max_length=50)),
('is_public', models.BooleanField(default=False)),
('fallback_priority', models.PositiveIntegerField(default=db_trans.models.get_default_priority, help_text=b'Lowest value will be first fallback language.', unique=True)),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Markup',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('markup', markupfield.fields.MarkupField()),
('markup_markup_type', models.CharField(default=b'markdown', max_length=30, editable=False, choices=[(b'', b'--'), (b'html', b'html'), (b'plain', b'plain'), (b'markdown', b'markdown')])),
('_markup_rendered', models.TextField(editable=False)),
('language', models.ForeignKey(to='db_trans.Language')),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='String',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('string', models.CharField(max_length=256)),
('language', models.ForeignKey(to='db_trans.Language')),
],
options={
},
bases=(models.Model,),
),
migrations.CreateModel(
name='TransMarkup',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('key', models.CharField(unique=True, max_length=50, db_index=True)),
('verbose_name', models.CharField(max_length=200, null=True, blank=True)),
],
options={
'verbose_name': 'Translated Markup',
},
bases=(models.Model,),
),
migrations.CreateModel(
name='TransString',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('key', models.CharField(unique=True, max_length=50, db_index=True)),
('verbose_name', models.CharField(max_length=200, null=True, blank=True)),
],
options={
'verbose_name': 'Translated String',
},
bases=(models.Model,),
),
migrations.AddField(
model_name='string',
name='trans_string',
field=models.ForeignKey(related_name='strings', to='db_trans.TransString'),
preserve_default=True,
),
migrations.AlterUniqueTogether(
name='string',
unique_together=set([('trans_string', 'language')]),
),
migrations.AddField(
model_name='markup',
name='trans_markup',
field=models.ForeignKey(related_name='markups', to='db_trans.TransMarkup'),
preserve_default=True,
),
migrations.AlterUniqueTogether(
name='markup',
unique_together=set([('trans_markup', 'language')]),
),
]
models.py:
from django.db import models
from django.template.loader import render_to_string
from django.utils.translation import get_language
from markupfield.fields import MarkupField
def get_default_priority():
max = Language.objects.all().aggregate(models.Max("fallback_priority"))["fallback_priority__max"]
if max:
return max + 10
return 50
class Language(models.Model):
code = models.CharField(
max_length=3,
null=False,
blank=False,
)
language = models.CharField(
max_length=50,
)
is_public = models.BooleanField(
default=False,
)
fallback_priority = models.PositiveIntegerField(
null=False,
unique=True,
default=get_default_priority,
help_text="Lowest value will be first fallback language."
)
def __unicode__(self):
unicode = self.code
if self.language:
unicode += u" - " + self.language
return unicode
class TransPhrase(models.Model):
key = models.CharField(
max_length=50,
unique=True,
null=False,
blank=False,
db_index=True,
)
verbose_name = models.CharField(
max_length=200,
null=True,
blank=True,
)
@classmethod
def get_translation(cls, key, description=None):
trans_phrase, created = cls.objects.get_or_create(key=key)
if not description:
trans_phrase.verbose_name = description
trans_phrase.save()
return trans_phrase
def render(self, wrap, csrf_token):
raise NotImplementedError
class Meta:
abstract = True
class TransMarkup(TransPhrase):
def get_trans(self, language_code, use_fallback=True):
try:
return self.markups.get(language__code=language_code)
except Markup.DoesNotExist:
if use_fallback:
fallback_markups = self.markups.all().order_by("language__fallback_priority")
if fallback_markups:
return fallback_markups[0]
language = Language.objects.get(code=language_code)
return Markup(trans_markup=self, language=language)
def __unicode__(self):
return u"[" + self.key + u"]"
def render(self, wrap, csrf_token):
from db_trans.forms import SetTransMarkupForm
markup = self.get_trans(get_language(), use_fallback=(not wrap))
if wrap:
context = {
"csrf_token": csrf_token,
"form": SetTransMarkupForm(instance=markup),
"trans_markup": markup
}
return render_to_string("db_trans/set_markup.html", context)
else:
return markup
class Meta:
verbose_name = "Translated Markup"
class Markup(models.Model):
markup = MarkupField(
markup_type="markdown"
)
trans_markup = models.ForeignKey(
TransMarkup,
null=False,
related_name="markups",
)
language = models.ForeignKey(
Language,
null=False,
)
def __unicode__(self):
if self.markup.rendered:
return self.markup.rendered
return u"[" + self.trans_markup.key + u"]"
class Meta:
unique_together = ("trans_markup", "language")
class TransString(TransPhrase):
def get_trans(self, language_code, use_fallback=True):
try:
return self.strings.get(language__code=language_code)
except String.DoesNotExist:
if use_fallback:
fallback_strings = self.strings.all().order_by("language__fallback_priority")
if fallback_strings:
return fallback_strings[0]
language = Language.objects.get(code=language_code)
return String(trans_string=self, language=language)
def render(self, wrap, csrf_token):
from db_trans.forms import SetTransStringForm
string = self.get_trans(get_language(), use_fallback=(not wrap))
if wrap:
context = {
"csrf_token": csrf_token,
"form": SetTransStringForm(instance=string),
"trans_string": string
}
return render_to_string("db_trans/set_string.html", context)
else:
return string
class Meta:
verbose_name = "Translated String"
class String(models.Model):
string = models.CharField(
max_length=256
)
trans_string = models.ForeignKey(
TransString,
null=False,
related_name="strings"
)
language = models.ForeignKey(
Language,
null=False,
)
def __unicode__(self):
if self.string:
return self.string
return u"[" + self.trans_string.key + u"]"
class Meta:
unique_together = ("trans_string", "language")
Help would be greatly appreciated!
I know this is an old question, but I recently had a similar error. The offensive line is probably:
File "C:\Users\Sverker\Dropbox\Picrates\db_trans\models.py", line 9, in get_default_priority
max = Language.objects.all().aggregate(models.Max("fallback_priority"))["fallback_priority__max"]
So here, you are querying the database with Language.objects.all()
. This line gets executed before the migrations are actually run, while there's still inconsistency between models.py
and the database itself.
Try commenting out that line (and other references to max
), and then re-run the migrations. That's what worked for me.
这篇关于Django 1.7迁移:django.db.utils.OperationalError:没有这样的表:db_trans_language的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!