我在一个更大的项目中使用django south,我唯一不喜欢它,你不能一次为所有应用程序创建schemamigrations(我有很多应用程序继承自相同的抽象模型,如果我改变基础模型,有很多应用程序要迁移) - 认为你可以实际上一次迁移所有这些(使用migrate --all).
所以我想知道是否有一个简单的解决方案,让django南一次处理一堆应用程序,或者是否有人有一个很好的脚本可以做到这一点?
我的一个Django模型是一个子类,我想将其超类更改为与原始类非常相似的类.特别是,新的超类描述了相同的对象并具有相同的主键.如何让South创建新的OneToOne字段并将值从旧字段复制到新字段?
我必须更新Django应用程序中的auth.user记录,以便为某些用户翻转"is_staff"位.我可以使用SQL脚本执行此操作,但如果我可以使用South数据迁移,则会更方便.
但是,每当我尝试manage.py datamigration auth whatever南方时,都会创建迁移lib/python2.7/site-packages/django/contrib/auth/migrations.这是否意味着使用南数据迁移来迁移用户数据是不可能的?或者是否有一些我缺少的解决方法?
假设我有这个与南方相关的模型:
class MyModel(models.Model):
field_a = models.CharField(max_length=30)
field_b = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)
现在稍后,我想再添加一个字段,以便在之间创建该字段field_a,field_b现在我的模型看起来像:
class MyModel(models.Model):
field_a = models.CharField(max_length=30)
field_c = models.CharField(max_length=30)
field_b = models.CharField(max_length=30)
Run Code Online (Sandbox Code Playgroud)
然后我迁移了这些更改,当检查MySQL中的表结构时,它field_c是在所有字段的末尾创建的.如何告诉南方维持字段顺序,例如插入后field_a.
在MySQL中,我们可以在任何现有字段之前或之后插入新字段.在南方可以这样做吗?
是否可以从Python代码运行迁移?我不想(实际上我不能)使用terminal命令:
venv/bin/python src/manage.py migrate myapp
Run Code Online (Sandbox Code Playgroud)
我需要在动态创建的数据库中将Python代码作为业务逻辑的一部分运行.
这是我到目前为止:
db_name = uuid.uuid4()
from settings.local import DATABASES
new_database = {}
new_database['ENGINE'] = 'django.db.backends.mysql'
new_database['NAME'] = db_name
new_database['USER'] = DATABASES["default"]["USER"]
new_database['PASSWORD'] = DATABASES["default"]["PASSWORD"]
new_database['HOST'] = DATABASES["default"]["HOST"]
new_database['PORT'] = DATABASES["default"]["PORT"]
import settings
database_id = str(uuid.uuid4())
settings.DATABASES[database_id] = new_database
from django.core.management import call_command
call_command('migrate', 'catalogue', database=database_id)
Run Code Online (Sandbox Code Playgroud)
但我得到:
KeyError: '28a4eb10-91e4-4de8-8a74-15d72f8245ef'
Run Code Online (Sandbox Code Playgroud) 我有一个Django应用程序,我添加了South,执行了一些迁移,并在我的本地计算机上按预期运行.但是,在将项目推送到Heroku后,我只有数据库错误.
在尝试处理我遇到的一个数据库错误时,我尝试了一个测试,我删除了我的一个模型,将编辑过的模型文件推送到Heroku并运行:
heroku run python manage.py schemamigration django_app test_remove_pub --auto
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常.我收到了消息:
Running `python manage.py schemamigration apricot_app test_remove_pub --auto` attached
to terminal... up, run.6408
- Deleted model django_app.Publication
- Deleted M2M table for journalists on django_app.Publication
- Deleted M2M table for tags on apricot_app.Publication
Created 0006_test_remove_pub.py. You can now apply this migration with: ./manage.py
migrate django_app
Run Code Online (Sandbox Code Playgroud)
所以,South似乎做了我所期望的一切 - 它删除了我的模型及其多对多的关系,并制作了相应的迁移文件.接下来,我输入:
heroku run python manage.py migrate django_app
Run Code Online (Sandbox Code Playgroud)
我回来了:
Running `python manage.py migrate django_app` attached to terminal... up, run.4792
Running migrations for django_app:
- …Run Code Online (Sandbox Code Playgroud) 我是Python(2.7)和Django(1.5)的新手,正在制作一个业余爱好网站,正在阅读Django的书.我正在使用Sqlite3作为dev db,但在生产中我打算使用MySQL.South看起来像是数据库模式迁移管理的一个很好的解决方案,但它与Sqlite不兼容.我现在很想在我的开发机器上安装MySQL,但想知道是否有办法避免这种情况.如果有人知道,我会很高兴知道这个问题的一个简单实用的解决方案.
编辑:我的意思是一个程序化的解决方案(对于那些认为这是偏离主题的人).我想可能有一种方法可以使用Django的settings.py和一些自定义代码来实现这一目标.
使用django,我需要在现有模型中添加一个新字段,如ManyToManyField.如何使用South更新我的数据库?我试过了
python manage.py schemamigration appname --initial
Run Code Online (Sandbox Code Playgroud)
和
python manage.py migrate appname --fake
Run Code Online (Sandbox Code Playgroud)
但仍然收到错误信息'没有这样的表'.
我的数据库中有一些数据需要一些时间才能导入,所以我不想清除我的数据库.我不熟悉SQL语言,有没有方便的方法来解决这个问题?
我在新安装的 lubuntu 16.04 上运行 django 1.9。我创建了一个虚拟环境并从 github 克隆了我的存储库。我尝试运行./manage.py runserver并收到错误:
ImportError: No module named south.v2
Run Code Online (Sandbox Code Playgroud)
我检查过其他类似的问题,但它们似乎暗示我是从南方升级的,我已经多年没有使用过南方了,而且从来没有在这个存储库上升级过。
Traceback (most recent call last):
File "/home/jcg/.virtualenvs/baseball/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "/home/jcg/.virtualenvs/baseball/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 117, in inner_run
self.check_migrations()
File "/home/jcg/.virtualenvs/baseball/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 163, in check_migrations
executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
File "/home/jcg/.virtualenvs/baseball/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 20, in __init__
self.loader = MigrationLoader(self.connection)
File "/home/jcg/.virtualenvs/baseball/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 49, in __init__
self.build_graph()
File "/home/jcg/.virtualenvs/baseball/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 170, in build_graph
self.load_disk()
File "/home/jcg/.virtualenvs/baseball/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 105, in load_disk
migration_module = import_module("%s.%s" % (module_name, …Run Code Online (Sandbox Code Playgroud) 我有一个Django proyect在heroku运行了一段时间了,事情就是这样,树天前,我已经尝试更新我的架构模型但是,每次我写
heroku run python manage.py migrate quizzer
Run Code Online (Sandbox Code Playgroud)
heroku一直告诉我一切都是最新的,但我已经改变了我的models.py文件夹并一如既往地运行模式迁移.
如果您知道为什么会这样,或者我如何强制架构迁移到我的heroku应用程序,请告诉我如何.
Ps:我无法删除洞数据库,因为存储在heroku中的数据和我本地服务器数据库中存储的数据不一样,我不想丢失用户的数据
django ×10
django-south ×10
python ×6
database ×2
heroku ×2
migration ×2
django-apps ×1
mysql ×1
python-2.7 ×1
sqlite ×1