- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于 Django 中的项目,我必须使用两个数据库:默认 和 远程 .我创建了 routers.py
一切正常。
需要在远程数据库上创建一个表,我创建了迁移,运行它和表 django_migrations
被创建。我只想只有一张 table django_migrations
, 在默认数据库中。routers.py
的相关部分在这儿:
class MyRouter(object):
# ...
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label == 'my_app':
return db == 'remote'
return None
python manage.py migrate my_app --database=remote
python manage.py runserver
You have 1 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): my_app.
Run 'python manage.py migrate' to apply them.
my_app
的表格在
remote
中创建数据库,并在
django_migrations
内
remote
数据库迁移被标记为已应用。
django_migrations
,但仍将迁移应用到不同的数据库?
最佳答案
由于对我的问题的评论,我做了一些研究并得出了以下发现。
使用多个数据库导致创建表 django_migrations
当使用迁移时。没有选项可以仅在一张表中记录迁移 django_migrations
,作为来自 Kamil Niski 的评论解释。阅读文件 django/db/migrations/recorder.py
后就很清楚了.
我将举例说明一个项目 foo
和一个应用程序 bar
项目内部。应用程序 bar
只有一种型号 Baz
.
我们创建项目:
django-admin startproject foo
- foo
- manage.py
mkdir foo/bar
python manage.py bar foo/bar
foo/settings.py
我们调整设置以使用两个不同的数据库,出于本示例的目的,我们使用
sqlite3
:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db1.sqlite3'),
},
'remote': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db2.sqlite3'),
}
}
python manage.py migrate --database=default
--database=default
是可选的,因为如果未指定,Django 将使用默认数据库。
Operations to perform: Apply all migrations: admin, auth, contenttypes, sessionsRunning migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying sessions.0001_initial... OK
Django has applied all migrations to the default database:
1 contenttypes 0001_initial 2019-11-13 16:51:04.7673822 auth 0001_initial 2019-11-13 16:51:04.7922453 admin 0001_initial 2019-11-13 16:51:04.8274544 admin 0002_logentr 2019-11-13 16:51:04.8466275 admin 0003_logentr 2019-11-13 16:51:04.8644586 contenttypes 0002_remove_ 2019-11-13 16:51:04.8922207 auth 0002_alter_p 2019-11-13 16:51:04.9064498 auth 0003_alter_u 2019-11-13 16:51:04.9239029 auth 0004_alter_u 2019-11-13 16:51:04.94170710 auth 0005_alter_u 2019-11-13 16:51:04.95837111 auth 0006_require 2019-11-13 16:51:04.96552712 auth 0007_alter_v 2019-11-13 16:51:04.98153213 auth 0008_alter_u 2019-11-13 16:51:05.00414914 auth 0009_alter_u 2019-11-13 16:51:05.01970515 auth 0010_alter_g 2019-11-13 16:51:05.03702316 auth 0011_update_ 2019-11-13 16:51:05.05444917 sessions 0001_initial 2019-11-13 16:51:05.063868
Now we create the model Baz
:
models.py
:
from django.db import models
class Baz(models.Model):
name = models.CharField(max_length=255, unique=True)
bar
进入
INSTALLED_APPS
(
foo/settings.py
) 并创建迁移:
python manage.py makemigrations bar
routers.py
内
bar
应用程序:
class BarRouter(object): def db_for_read(self, model, **hints): if model._meta.app_label == 'bar': return 'remote' return None def db_for_write(self, model, **hints): if model._meta.app_label == 'bar': return 'remote' return None def allow_relation(self, obj1, obj2, **hints): return None def allow_migrate(self, db, app_label, model_name=None, **hints): if app_label == 'bar': return db == 'remote' if db == 'remote': return False return None
and register it in foo/settings.py
:
DATABASE_ROUTERS = ['foo.bar.routers.BarRouter']
bar
的迁移。进
remote
数据库:
python manage.py migrate bar --database=remote
Operations to perform: Apply all migrations: barRunning migrations: Applying bar.0001_initial... OK
The migrations has been applied to the remote
database:
1 bar 0001_initial 2019-11-13 17:32:39.701784
When we run:
python manage.py runserver
You have 1 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): bar.
Run 'python manage.py migrate' to apply them.
python manage.py migrate --database=default
python manage.py migrate --database=remote
bar
创建迁移之后:
python manage.py migrate bar --database=default
python manage.py migrate bar --database=remote
bar_baz
仅在
remote
中创建数据库,但 Django 会将迁移标记为在两个数据库中应用。还有
auth
的表格,
admin
,
sessions
等将仅在
default
中创建数据库,如
routers.py
中所指定.表
django_migrations
在
remote
数据库也会有这些迁移的记录。
关于python - 在 Django 中使用多个数据库,只有一张表 "django_migrations",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58608319/
我最近遇到了数据库问题,所以我决定对它进行核攻击,因为我没有重要的数据。我删除了应用程序目录中的迁移文件夹并删除了数据库。但是现在,当我使用 manage.py migrate 重新创建所有内容时,出
我需要在表django_migrations中写入我正在使用的内容: fix_migration.py from django.db import connection from django.db.
我正在使用 Django CMS,我想备份我的数据库。但是当我触发查询以收回数据库时: pg_dump -U postgres -h 127.0.0.1 -p 5432 db_name > db_na
我正在开发一个 Django 网络应用程序,我注意到一些奇怪的事情。以下查询将在数据库中继续执行 SELECT "django_migrations"."app", "django_migration
我在 Django 框架下建立一个网站,这个网站需要有不同的 SQL 方案,现在我成功地创建了所有方案和所有东西,但我不明白为什么迁移后每个模式中都有表 django_migrations数据库。 预
我正在尝试编写一些单元测试并使用 manage.py test 运行它们,但由于某些原因脚本无法创建 django_migrations 表。 这是完整的错误: Creating test datab
对于 Django 中的项目,我必须使用两个数据库:默认 和 远程 .我创建了 routers.py一切正常。 需要在远程数据库上创建一个表,我创建了迁移,运行它和表 django_migration
在 Heroku 上尝试使用 django 迁移数据库更改时,我得到: psycopg2.ProgrammingError: permission denied for relation django
我正在尝试将 pytest-django 添加到我当前的 pytest3/Django1.7 环境中。 目前我们还没有使用该插件,并且一直受到某些测试之间的共享状态的困扰 在我收到以下错误消息时,一切
Django dumpdata(未指定应用程序)将所有已安装应用程序的所有表转储到输出文件中。我刚刚意识到这不包括 django_migrations 表。我检查了其他 django 表,它们被包含在
在为新项目创建数据库时,我以某种方式搞砸了我的迁移。我现在遇到不适用的迁移问题: Operations to perform: Apply all migrations: wagtailusers
我做的步骤:1.删除迁移文件。2.只创建了一个初始迁移文件。3. 输入 psql 命令提示符。连接到数据库。删除架构公共(public)级联;创建公共(public)模式;4.再次尝试迁移。 我收
我正在使用数据库 Oracle 11g 在 Django-2.0.1 中启动一个项目,当我运行 $python manage.py migrate 时,出现错误 django.db.migration
我正在尝试将生产数据库恢复到我的本地计算机,类似于为 Heroku ( https://devcenter.heroku.com/articles/heroku-postgres-import-exp
我用谷歌搜索了这个问题。有很多类似的问题,但我找不到合适的答案。 这是错误日志的详细信息: Traceback (most recent call last): File "manage.py",
我使用 django_celery 连接到 Amazon Redshift。要迁移数据库,在“makemigrations”之后我使用了命令“python manage.py migrate”,错误消
我已经安装了 postgreSQL 和 psycopg2,然后我创建了一个数据库和用户,我已经授予用户对数据库的所有权限,并且我已经在 settings.py 中进行了所有更改。但是当我尝试迁移时,出
我最近开始收到一个错误,无法识别使用 SQLite 的 Django 项目。下面链接的项目以前与 Python 2/3 兼容,尽管我主要使用 Python 2 运行它。最近,我将大部分计算机和项目切换
有哪些基本步骤可以排除 Django 的“django.db.utils.ProgrammingError: permission denied for relationship django_mig
我是一名优秀的程序员,十分优秀!