- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
首先,我创建我的数据库。
create database mydb;
我将“南”添加到已安装的应用程序中。然后,我去这个教程: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
太好了,现在我迁移了。
$ py manage.py migrate wall
但它给了我这个错误......
django.db.utils.DatabaseError: (1146, "Table 'fable.south_migrationhistory' doesn't exist")
所以我使用谷歌(它从来没有用过。因此我在 Stackoverflow 上提出了 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
但是当我运行 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)
酷....现在它告诉我迁移这些。所以,我这样做:
$ py manage.py migrate wall
The app 'wall' does not appear to use migrations.
好的,很好。我将在初始迁移中添加墙。
$ py manage.py schemamigration wall --initial
然后我迁移:
$ py manage.py migrate wall
你知道吗?它给了我这个BS:
_mysql_exceptions.OperationalError: (1050, "Table 'wall_content' already exists")
对不起,这真的让我很生气。有人可以帮忙吗?谢谢。
如何让 South 正常工作并与所有内容正确同步?我唯一能想到的就是从 INSTALLED_APPS 中删除我的应用程序,然后运行 syncdb,然后重新添加它。
太傻了。
最佳答案
South 允许您在首次开始使用新应用且表尚未添加到数据库时创建迁移,以及为数据库中已有表的旧应用创建迁移。关键是知道什么时候该做什么。
你的第一个错误是当你删除你的迁移时,一旦你这样做了,然后运行了 syncdb,Django 不知道你想让 south 再管理那个应用程序,所以它为你创建了表。当您创建初始迁移然后运行迁移时,South 试图创建 django 已经创建的表,因此您的错误。
此时你有两个选择。
从您的数据库中删除墙应用程序的表,然后运行 $ py manage.py migrate wall
这将运行迁移并创建您的表。
伪造初始迁移运行$ py manage.py migrate wall 0001 --fake
这将告诉 south 你已经在数据库中拥有表,所以只需伪造它,这将在 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
它会为你改变你的数据库。
希望对您有所帮助。
关于python - 为什么我的南迁不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4840102/
我有一个模型,我成功地在两台不同的计算机上迁移了它,没有出现任何问题。但是在我的服务器上出现以下错误: Error in migration: some_app:0002_auto__some_mig
我正在阅读South's documentation about how to convert an app . 我不明白示例 ./manage.py migrate myapp 0001 --fak
我是 django 的新手,并试图将外键返回给受让人和报告者的用户。但是当我尝试对 South 应用更改时,我得到了错误 ValueError: The database backend does n
我是一名优秀的程序员,十分优秀!