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

网上中文版的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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值