Django4.1.7通过djongo1.3.6链接mongoDB6.0.4

  • Post author:
  • Post category:其他


网上中文版的djongo链接mongoDB基本都是抄袭州的先生大哥的文章。

文章成文比较久,至少是2019年成文的了,有一些情况发生了变化,今天就自己测试的情况做一些记录。

本文成文日期为:2023年3月2日,请注意参考

废话不多说,直接说我遇到的3个问题。



1.djongo驱动不识别

错误信息:

django.core.exceptions.ImproperlyConfigured: ‘djongo’ isn’t an available database backend or couldn’t be imported. Check the above exception. To use ondjango.core.exceptions.ImproperlyConfigured: ‘djongo’ isn’t an available databasedjango.core.exceptions.ImproperlyConfigured: ‘djongo’ isn’t an available database backend or couldn’t be imported. Check the above exception. To use one of the built-in backends,django.core.exceptions.ImproperlyConfigured: ‘djongo’ isn’t an available database backend or couldn’t be imported. Check the above exception. To use one of the built-in backends, use ‘django.db.backends.XX

X’, where XXX is one of:

‘mysql’, ‘oracle’, ‘postgresql’, ‘sqlite3’

根据:https://github.com/doableware/djongo/issues/594

中的MrYazdan大佬提示


pip install pytz


安装pytz这个包后该问题解决。



2.数据库链接错误

错误信息:

NotImplementedError: Database objects do not implement truth value testing or bool(). Please compare with None instead: database is not None

另一个连接报错信息为:

pymongo.errors.ServerSelectionTimeoutError: localhost:27017: [WinError 10061] 由于目标计算机积极拒绝,无法连接。, Timeout: 30s, Topology Description: <TopologyDescription id: 64001613c2c8ebc2982285e6, topo

logy_type: Unknown, servers: [<ServerDescription (‘localhost’, 27017) server_type: Unknown, rtt: None, error=AutoReconnect(‘localhost:27017: [WinError 10061] 由于目标计算机积极拒绝,无法连接。’)>]>

比较明显,应该是地址配置错误了,导致他还是去连接localhost的地址。

原因为djongo的配置参数变化了:

    DATABASES = {
        'default': {
            'ENGINE': 'djongo',
            # 指定具体的数据库还是用NAME
            'NAME': 'your-db-name',
            'ENFORCE_SCHEMA': False,
            # 对比州大佬使用的时候host被整合进了这个client中
            'CLIENT': {
                'host': 'host-name or ip address',
                'port': port_number,
                'username': 'db-username',
                'password': 'password',
                # 该参数好像不是用来指定数据库名称,具体什么作用我没有研究。
                'authSource': 'db-name',
                'authMechanism': 'SCRAM-SHA-1'
            },
            'LOGGING': {
                'version': 1,
                'loggers': {
                    'djongo': {
                        'level': 'DEBUG',
                        'propagate': False,                        
                    }
                },
             },
        }
    }

再看一眼州大佬给出的配置

# 旧配置参考,当前版本:djongo:1.3.6以无法使用
DATABASES = {
   'default': {
      'ENGINE': 'djongo',
      'ENFORCE_SCHEMA': True,
      'NAME': 'your-db-name',
      # 已经不能通过这种方式指定
      'HOST': 'host-name or ip address',
      'PORT': port_number,
      'USER': 'db-username',
      'PASSWORD': 'password',
      'AUTH_SOURCE': 'db-name',
      'AUTH_MECHANISM': 'SCRAM-SHA-1',
      'REPLICASET': 'replicaset',
      'SSL': 'ssl',
      'SSL_CERTFILE': 'ssl_certfile',
      'SSL_CA_CERTS': 'ssl_ca_certs',
      'READ_PREFERENCE': 'read_preference'
   }
}



3.pymongo版本过高导致建表异常

错误信息:

TypeError: ‘Collection’ object is not callable. If you meant to call the ‘update’ method on a ‘Collection’ object it is failing because no such method exists.

NotImplementedError: Database objects do not implement truth value testing or bool(). Please compare with None instead: database is not None

将 Pymongo 降低版本至 3.12.1,当前最新版本为:pymongo-4.3.3


pip install pymongo==3.12.1



4.最终依赖情况

Django          4.1.7
django-simpleui 2023.3.1
djongo          1.3.6
dnspython       2.3.0
pip             23.0.1
pymongo         3.12.1
pytz            2022.7.1
setuptools      67.4.0
sqlparse        0.2.4
tzdata          2022.7



版权声明:本文为u013113491原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。