繁体   English   中英

重新启动Django中的postgres连接

[英]Restart postgres connection in django

我这里的情况很奇怪。

问题:我在这篇文章中描述了原始问题,但总结一下:

使用该项目一段时间后,makemigrations不再为我工作。 (是的,我已将一切设置为正常,设置也正常,..请参阅我对以前帖子的评论)

我决定无法解决这个问题,因此我将重新开始。 (这就是为什么git是用于:D的原因)

因此,我删除了django项目,创建了新的虚拟环境,并在postgres中创建了新的数据库和新用户。

我在配置文件中更新了新的数据库参数,并尝试运行初始makemigrations,但没有任何帮助。 仍然说没有新的迁移可用。

我很绝望,因为我不能从事该项目,所以任何解决方案都可以:D

(virtual_environment) MacBook-Pro-2:MY_PROJECT marko$ python manage.py makemigrations connectors environment=local
I will use local settings.
No changes detected in app 'connectors'

我所有的迁移

(virtual_environment) MacBook-Pro-2:MY_PROJECT marko$ python manage.py showmigrations environment=local
I will use local settings.
admin
 [X] 0001_initial
 [X] 0002_logentry_remove_auto_add
auth
 [X] 0001_initial
 [X] 0002_alter_permission_name_max_length
 [X] 0003_alter_user_email_max_length
 [X] 0004_alter_user_username_opts
 [X] 0005_alter_user_last_login_null
 [X] 0006_require_contenttypes_0002
 [X] 0007_alter_validators_add_error_messages
 [X] 0008_alter_user_username_max_length
connectors
 (no migrations)
contenttypes
 [X] 0001_initial
 [X] 0002_remove_content_type_name
sessions
 [X] 0001_initial

午餐迁移时

(virtual_environment) MacBook-Pro-2:MY_PROJECT marko$ python manage.py migrate --fake-initial environment=local
I will use local settings.
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  No migrations to apply.

有趣的是,如果我关闭postgres数据库,我仍然会在终端中得到相同的文本。 我猜应该会出现一些连接错误。

数据库配置yaml

database:
  port: 5432
  host: 'localhost'
  user: 'user1'
  password: 'user_password_123!'
  db: 'db1'

和我的设置文件:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': CONFIG['database']['db'],
        'USER': CONFIG['database']['user'],
        'PASSWORD': CONFIG['database']['password'],
        'HOST': CONFIG['database']['host'],
        'PORT': CONFIG['database']['port'],
    }
}

几个小时后,我找到了解决方案,这实际上是我的错误。 我只会为那些犯类似错误的人张贴答案:D

实际上,@ Alasdair和@AdamBarnes是正确的。 我没有连接到新数据库,但这不是因为数据库设置错误(主机,端口,用户名,数据库等)。

我在settings.py所拥有的是数据库的设置以及用于单元测试的数据库的设置。

# Databases start
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': CONFIG['database']['db'],
        'USER': CONFIG['database']['user'],
        'PASSWORD': CONFIG['database']['password'],
        'HOST': CONFIG['database']['host'],
        'PORT': CONFIG['database']['port'],
     }
}

if 'test' or 'jenkins' in sys.argv:
    DATABASES['default'] = {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'test_database',
}

问题是下面的if语句。 由于某种原因,他知道这始终是正确的。 因此程序迁移了sqlite内部测试数据库。

我需要用

if ('test' in sys.argv) or ('jenkins' in sys.argv):

此修复程序的第一个问题是,在进行迁移时,它将保留为空数据库。 完成此修复后,将使用默认的Django表而不是我的表填充数据库。

解决此问题的方法是将我的models.py导入admin.py文件中。

import connectors.models

非常感谢,给我很大的提示的每个人都找到解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM