TIM*_*MEX 79 python migration django django-south
首先,我创建了我的数据库.
create database mydb;
Run Code Online (Sandbox Code Playgroud)
我在安装的应用程序中添加"南".然后,我转到本教程:http: //south.aeracode.org/docs/tutorial/part1.html
教程告诉我这样做:
$ py manage.py schemamigration wall --initial
>>> Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate wall
Run Code Online (Sandbox Code Playgroud)
好的,现在我迁移了.
$ py manage.py migrate wall
Run Code Online (Sandbox Code Playgroud)
但它给了我这个错误......
django.db.utils.DatabaseError: (1146, "Table 'fable.south_migrationhistory' doesn't exist")
Run Code Online (Sandbox Code Playgroud)
所以我使用谷歌(这永远不会奏效,因此问#2我的870度的问题.),我得到这个页面:http://groups.google.com/group/south-users/browse_thread/thread/d4c83f821dd2ca1c
好的,所以我按照说明进行操作
>> Drop database mydb;
>> Create database mydb;
$ rm -rf ./wall/migrations
$ py manage.py syncdb
Run Code Online (Sandbox Code Playgroud)
但是当我运行syncdb时,Django会创建一堆表.是的,它创建了south_migrationhistory表,但它也创建了我的应用程序表.
Synced:
> django.contrib.admin
> django.contrib.auth
> django.contrib.contenttypes
> django.contrib.sessions
> django.contrib.sites
> django.contrib.messages
> south
> fable.notification
> pagination
> timezones
> fable.wall
> mediasync
> staticfiles
> debug_toolbar
Not synced (use migrations):
-
(use ./manage.py migrate to migrate these)
Run Code Online (Sandbox Code Playgroud)
酷....现在它告诉我迁移这些.所以,我这样做:
$ py manage.py migrate wall
The app 'wall' does not appear to use migrations.
Run Code Online (Sandbox Code Playgroud)
好的,好的.我将为初始迁移添加墙.
$ py manage.py schemamigration wall --initial
Run Code Online (Sandbox Code Playgroud)
然后我迁移:
$ py manage.py migrate wall
Run Code Online (Sandbox Code Playgroud)
你知道吗?它给了我这个BS:
_mysql_exceptions.OperationalError: (1050, "Table 'wall_content' already exists")
Run Code Online (Sandbox Code Playgroud)
对不起,这真让我烦恼.有人可以帮忙吗?谢谢.
如何让South工作并正确地与所有内容同步?我唯一能想到的是从INSTALLED_APPS中删除我的应用程序,然后运行syncdb,然后重新添加它.
那就是S SILLY.
Ken*_*ane 175
South允许您在刚开始使用新应用程序时创建迁移,并且尚未将表添加到数据库中,以及为已在数据库中具有表的旧应用程序创建迁移.关键是要知道何时做什么.
你的第一个错误是当你删除你的迁移时,一旦你这样做了,然后运行了syncdb,Django就不知道你想让南方管理那个应用了,所以它为你创建了表.当您创建初始迁移然后运行迁移时,南方尝试创建django已创建的表,从而创建错误.
此时您有两种选择.
从数据库中删除墙上应用程序的表,然后运行$ py manage.py migrate wall
这将运行迁移并创建表.
假出初始运行迁移
$ py manage.py migrate wall 0001 --fake
.这会告诉南,你已经有数据库,以便只是假的,这将增加一行到south_migrationhistory表上的表格,以便在下次运行迁移时,将知道第一个迁移已经运行了.
python manage.py schemamigration app_name --initial
这将为您的应用程序创建初始迁移文件python manage.py migrate app_name
这将表添加到数据库.python manage.py schemamigration app_name --initial
这将创建您的初始迁移python manage.py migrate app_name 0001 --fake
,这将假了南方,也不会做任何数据库这些模型,它只是记录添加到south_migrationhistory表,让你想创建一个迁移接下来的时间,你都组.python manage.py schemamigration app_name --initial
这将创建您的初始迁移python manage.py migrate
这将运行您的应用程序的所有迁移.现在您已经设置了south,您可以开始使用south来管理对这些应用程序的模型更改.最常见的命令是python manage.py schemamigration app_name migration_name --auto
查看上次运行的迁移,它将查找更改并为您构建迁移文件.然后你只需要运行python manage.py migrate
它就可以为你改变数据库.
希望有所帮助.
Cpp*_*ner 10
这就是我让事情发挥作用的方式.
pip install South
# add 'south', to INSTALL_APPS, then
python manage.py syncdb
# For existing project + database
python manage.py convert_to_south app_name
# Thereafter, call them per model changes
python manage.py schemamigration app_name --auto
python manage.py migrate app_name
Run Code Online (Sandbox Code Playgroud)
参考文献:
http://garmoncheg.blogspot.com/2011/08/django-how-and-why-to-use-migrations.html http://www.djangopro.com/2011/01/django-database-migration-tool -south解释的/
您正在使用的教程说明:
(如果失败抱怨salt_migrationhistory不存在,则在安装South后忘记运行syncdb .)
假设您的帖子准确地详细说明了您所采取的步骤,则该链接似乎表明您在设置新应用之前错过了一个步骤.在您阅读有关在新应用程序上设置迁移的教程时,顺序为:
INSTALLED_APPS
.syncdb
.也就是说,syncdb
在添加新应用的模型之前,您应该已经运行了.您删除应用程序的解决方案INSTALLED_APPS
应该可行,但值得注意的是,它实际上只是一个"愚蠢"的解决方案,因为您错过了之前的步骤.已经syncdb
被运行您创建该应用的模型前,你就不必了变通使用.
归档时间: |
|
查看次数: |
47940 次 |
最近记录: |