Django South初始迁移错误

时间:2021-05-08 19:15:30

I have a new Django 1.3 project and app that I've created. I added south to my settings.py and have not yet run syncdb. When I execute the following commands per the South tutorial and documentation, I received the error shown below.

我有一个新的Django 1.3项目和我创建的应用程序。我向南添加到我的settings.py并且还没有运行syncdb。当我按照南方教程和文档执行以下命令时,我收到了如下所示的错误。

  • Any thoughts on what's causing the problem? Update: Not properly installing South (see answer).
  • 有关导致问题的原因的任何想法?更新:未正确安装South(请参阅答案)。
  • Is South 0.7.3 compatible with Django 1.3? Update: Yes.
  • South 0.7.3与Django 1.3兼容吗?更新:是的。

Commands Executed and South Error

$ python ./manage.py schemamigration qexpenses --initial
Creating migrations directory at '/Users/matthew/development/quest-projects/qexpense-tracker/quexptrkr/../quexptrkr/qexpenses/migrations'...
Creating __init__.py in '/Users/matthew/development/quest-projects/qexpense-tracker/quexptrkr/../quexptrkr/qexpenses/migrations'...
 + Added model qexpenses.Buyer
 + Added model qexpenses.Vendor
 + Added model qexpenses.Department
 + Added model qexpenses.Project
 + Added model qexpenses.PurchaseType
 + Added model qexpenses.PurchaseOrder
Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate qexpenses
(qexpense-tracker)matthew@Matthew-Rankins-MacBook-Pro:~/development/quest-projects/qexpense-tracker/quexptrkr
$ python ./manage.py migrate
Traceback (most recent call last):
  File "./manage.py", line 14, in <module>
    execute_manager(settings)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/south/management/commands/migrate.py", line 105, in handle
    ignore_ghosts = ignore_ghosts,
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/south/migration/__init__.py", line 171, in migrate_app
    applied = check_migration_histories(applied, delete_ghosts, ignore_ghosts)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/south/migration/__init__.py", line 72, in check_migration_histories
    for h in histories:
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/models/query.py", line 107, in _result_iter
    self._fill_cache()
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/models/query.py", line 772, in _fill_cache
    self._result_cache.append(self._iter.next())
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/models/query.py", line 273, in iterator
    for row in compiler.results_iter():
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 680, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 735, in execute_sql
    cursor.execute(sql, params)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/backends/util.py", line 34, in execute
    return self.cursor.execute(sql, params)
  File "/Users/matthew/.virtualenvs/qexpense-tracker/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 234, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.DatabaseError: no such table: south_migrationhistory
(qexpense-tracker)matthew@Matthew-Rankins-MacBook-Pro:~/development/quest-projects/qexpense-tracker/quexptrkr
$ 

Configuration

I'm running OS X 10.6.7. Below is the output of pip 1.0 requirements.txt for my virtualenv:

我正在运行OS X 10.6.7。以下是我的virtualenv的pip 1.0 requirements.txt的输出:

$ cat requirements.txt 
Django==1.3
South==0.7.3
distribute==0.6.15
virtualenv==1.6
virtualenvwrapper==2.6.3
wsgiref==0.1.2

1 个解决方案

#1


28  

Ken Cochrane's answer to the * question How Come My South Migrations Doesn't Work for Django held the key.

Ken Cochrane对*问题的回答如何让我的南迁移对Django不起作用。

For a new Django project and app, I had to perform the following steps:

对于新的Django项目和应用程序,我必须执行以下步骤:

  1. Add South to INSTALLED_APPS in settings.py, but do not add your apps
  2. 在settings.py中将South添加到INSTALLED_APPS,但不添加您的应用
  3. Run syncdb to add the Django and South tables to the database. South modifies syncdb, so it's important to have South in your INSTALLED_APPS.
  4. 运行syncdb将Django和South表添加到数据库。 South修改了syncdb,因此在INSTALLED_APPS中使用South非常重要。
  5. Add apps to INSTALLED_APPS in settings.py
  6. 在settings.py中将应用添加到INSTALLED_APPS
  7. Run python manage.py schemamigration app_name --initial for each app
  8. 为每个应用程序运行python manage.py schemamigration app_name --initial
  9. Run python manage.py migrate app_name
  10. 运行python manage.py migrate app_name

Read the instructions—No, all of the instructions

I was so excited to start using South that I skipped reading the installation documentation. I simply installed South using pip install south and then just added it to my INSTALLED_APPS. That was my mistake.

我很高兴开始使用South,我跳过阅读安装文档。我只是使用pip install south安装South,然后将它添加到我的INSTALLED_APPS中。那是我的错。

The Configuring Your Django Installation section of the installation documentation states:

安装文档的配置Django安装部分说明:

Once South is added in, you’ll need to run ./manage.py syncdb to make the South migration-tracking tables (South doesn’t use migrations for its own models, for various reasons).

一旦添加了South,您将需要运行./manage.py syncdb以生成南迁移跟踪表(由于各种原因,South不会为其自己的模型使用迁移)。

#1


28  

Ken Cochrane's answer to the * question How Come My South Migrations Doesn't Work for Django held the key.

Ken Cochrane对*问题的回答如何让我的南迁移对Django不起作用。

For a new Django project and app, I had to perform the following steps:

对于新的Django项目和应用程序,我必须执行以下步骤:

  1. Add South to INSTALLED_APPS in settings.py, but do not add your apps
  2. 在settings.py中将South添加到INSTALLED_APPS,但不添加您的应用
  3. Run syncdb to add the Django and South tables to the database. South modifies syncdb, so it's important to have South in your INSTALLED_APPS.
  4. 运行syncdb将Django和South表添加到数据库。 South修改了syncdb,因此在INSTALLED_APPS中使用South非常重要。
  5. Add apps to INSTALLED_APPS in settings.py
  6. 在settings.py中将应用添加到INSTALLED_APPS
  7. Run python manage.py schemamigration app_name --initial for each app
  8. 为每个应用程序运行python manage.py schemamigration app_name --initial
  9. Run python manage.py migrate app_name
  10. 运行python manage.py migrate app_name

Read the instructions—No, all of the instructions

I was so excited to start using South that I skipped reading the installation documentation. I simply installed South using pip install south and then just added it to my INSTALLED_APPS. That was my mistake.

我很高兴开始使用South,我跳过阅读安装文档。我只是使用pip install south安装South,然后将它添加到我的INSTALLED_APPS中。那是我的错。

The Configuring Your Django Installation section of the installation documentation states:

安装文档的配置Django安装部分说明:

Once South is added in, you’ll need to run ./manage.py syncdb to make the South migration-tracking tables (South doesn’t use migrations for its own models, for various reasons).

一旦添加了South,您将需要运行./manage.py syncdb以生成南迁移跟踪表(由于各种原因,South不会为其自己的模型使用迁移)。