我正在开发一个新的django项目并关注this tutorial。我正在“使用South for Database Migrations”,尝试运行python manage.py syncdb
,我收到以下错误:
(editorial)[hookedonwinter@hookedonwinter editorial (master *)]$ python manage.py syncdb
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/django/core/management/__init__.py", line 453, in execute_from_command_line
utility.execute()
File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/django/core/management/__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/django/core/management/__init__.py", line 272, in fetch_command
klass = load_command_class(app_name, subcommand)
File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/django/core/management/__init__.py", line 77, in load_command_class
module = import_module('%s.management.commands.%s' % (app_name, name))
File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/south/management/commands/__init__.py", line 13, in <module>
from south.management.commands.syncdb import Command as SyncCommand
File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/south/management/commands/syncdb.py", line 18, in <module>
from south import migration
File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/south/migration/__init__.py", line 11, in <module>
from south.models import MigrationHistory
File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/south/models.py", line 4, in <module>
class MigrationHistory(models.Model):
File "/Users/hookedonwinter/.virtualenvs/editorial/lib/python2.6/site-packages/django/db/models/base.py", line 97, in __new__
new_class.add_to_class('_meta', Options(meta, **kwargs))
TypeError: Error when calling the metaclass bases
__init__() keywords must be strings
这是我的settings.py文件:https://gist.github.com/pjhoberman/5273653
还没有应用程序,只是一个空项目。我猜这是我的一个简单的忽视 - 任何想法?
修改
来自评论:
我还没有任何型号。在我完成任何模型工作之前,我正试着从南方开始。
版本:
如果我在settings.py中向南注释,我会收到此错误:
$ python manage.py syncdb
TypeError: Error when calling the metaclass bases __init__() keywords must be strings
EDIT2
我重新开始使用django 1.4,它的工作原理。
EDIT3
我将python更新为2.7并使用了django 1.5,这一切都运行良好。
答案 0 :(得分:2)
底部的“TypeError”是解决方案。如果使用低于2.6.5的Python版本,则会从Django 1.5中收到此错误。问题上有Django bug report和SO discussion。可以说错误信息不是直观的。
OP是对的,没有一个答案解决了这个问题。解决方案是:1)将Python升级到2.7,2)将Django降级到1.4。
答案 1 :(得分:1)
我认为问题在于您在数据库设置中使用的“〜”字符。尝试将#coding=utf-8
作为设置的第一行或第二行,看看会发生什么。
如果这不能解决您的问题,请在manage.py
文件的同一目录中更改数据库文件名,如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'databasename.sql',
}
}
我尝试按照你发布的教程创建一个新环境,我没有问题。但是当我尝试使用你正在尝试的数据库名称(名称中带有“〜”的名称)时,我收到此错误:
(env) user@pc:/path >$ python manage.py syncdb --noinput
Syncing...
OperationalError: unable to open database file
我敢打赌,这个符号是你问题的根源......告诉我们这是否解决了你的问题!
答案 2 :(得分:1)
我将python更新为2.7并使用了django 1.5,这一切都运行良好。
没有一个答案真正解决了这个问题,所以我自己回答,因为现在我无法删除这个问题。
答案 3 :(得分:0)
南方有很好的文件记录,我相信你在完成它之后会很清楚。
这是教程。
http://south.readthedocs.org/en/0.7.6/tutorial/part1.html
仍然让生活变得更简单..
1)向南下载并将其添加到您的apps目录
2)在settings.py中将“south”添加到INSTALLED APPS
3)运行syncdb
4)$ ./manage.py schemamigration appname --initial
5)$ ./manage.py迁移appname
这是一个非常基本的开始所需要的一切。
答案 4 :(得分:0)
这似乎是一个DB配置问题,试试这个。在文件的顶部:
import os
然后:
PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(PROJECT_DIR, 'yourdatabasename.db'),
}
}
最后一个syncdb应该可以解决问题。您也可以尝试“python manage.py reset south”来修复APP中可能出现的问题。如果这不起作用,我建议你开始一个新问题来丢弃其他错误。
答案 5 :(得分:0)
你需要Python 2.6.5+才能运行Django 1.5。这就是为什么降级到Django 1.4或升级到Python 2.7的原因解决了你的问题。
https://docs.djangoproject.com/en/dev/releases/1.5/#python-compatibility