Django:重新创建表格

时间:2013-05-14 03:44:23

标签: python mysql django

让我进一步澄清我正在做的事情。我一直在我的机器上开发我的Django项目。我也在将代码检入存储库。目前我是唯一的开发人员,但其他开发人员将加入。他们将从存储库中签出代码并在他们的机器上运行它。为了模拟这种情况,我将我的代码检出到另一个目录并创建了一个新的数据库。我更新了该checkout的settings.py以使用新数据库。当我执行syncdb重新创建表时,我收到此错误:

$ python -i manage.py syncdb
DatabaseError: (1146, "Table 'testproj.auth_user' doesn't exist")
Traceback (most recent call last):
  File "manage.py", line 13, in <module>
    execute_from_command_line(sys.argv)
  File "c:\Users\jpp\Documents\.virtualenvs\django-test\lib\site-packages\dja
ngo\core\management\__init__.py", line 453, in execute_from_command_line
    utility.execute()
  File "c:\Users\jpp\Documents\.virtualenvs\django-test\lib\site-packages\dja
ngo\core\management\__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "c:\Users\jpp\Documents\.virtualenvs\django-test\lib\site-packages\dja
ngo\core\management\base.py", line 230, in run_from_argv
    sys.exit(1)
SystemExit: 1

这是phymyadmin的数据库设置:

User    Host        Type    Privileges      Grant   Action
root    localhost   global  ALL PRIVILEGES  Yes     Edit Privileges

和来自settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'testproj',             # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': 'root',
        'PASSWORD': '****',
        'HOST': '127.0.0.1',            # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                     # Set to empty string for default.
    }
}

这是INSTALLED_APPS:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'helloworld',
)

因此,我怀疑另一位开发人员遇到同样的问题。这是一个必须在之前解决的方案,但我还没有能够为Google整理正确的词语。

2 个答案:

答案 0 :(得分:0)

您不需要创建测试表,Django会自动执行此操作

Test db documentation

如果您愿意,可以使用单独的数据库进行测试,只需将其添加到settings file即可。确保创建了DB,但Django自己创建表。

答案 1 :(得分:0)

我发现了问题。

在我创建的应用程序helloworld中,我在__init__.py中有以下内容:

from django.contrib.auth.models import User

if User.objects.filter(username="hello").count() == 0:
  user = User.objects.create_user(username='hello', password='hellotest')
  user.save()

当我注释掉整个if语句并运行syncdb时,所有表都被重新创建。我想在创建自己的所有表之前,auth_userauth_group等等.Django可以完成应用程序所需的任何工作。我不确定这是否是python进程打包或Django中的bug /限制的结果。