django中使用无结构数据库+有结构数据库踩到的坑总结

#迁移数据 遇到的错误复盘

错误1:

djongo.exceptions.SQLDecodeError: 

        Keyword: None
        Sub SQL: None
        FAILED SQL: ('INSERT INTO "django_migrations" ("app", "name", "applied") VALUES (%(0)s, %(1)s, %(2)s)',)
        Params: (['contenttypes', '0001_initial', datetime.datetime(2024, 4, 25, 1, 12, 25, 839781)],)
        Version: 1.3.6
    raise db_exe from e
django.db.utils.DatabaseError

按网络上说的下载了pymongo==3.12.1还是这个错误

后面使用全新的django项目测试发现是django版本太高了。

最后配置如下:

asgiref==3.8.1
Django==4.1.13
djongo==1.3.6
dnspython==2.6.1
pymongo==3.12.1
pytz==2024.1
sqlparse==0.2.4

因为在settings.py中INSTALLED_APPS加了

'django_celery_beat',
'django_celery_results',出现

 raise SQLDecodeError
djongo.exceptions.SQLDecodeError: 

        Keyword: None
        Sub SQL: None
        FAILED SQL: ('UPDATE "django_celery_results_taskresult" SET "date_created" = "django_celery_results_taskresult"."date_done"',)
        Params: ((),)
        Version: 1.3.6

解决办法:先注释掉他们两个。(其实只要先注释掉`'django_celery_results',`)

迁移有序结构数据库的过程中还遇到错误:

 raise ValueError(
ValueError: Related model 'myapp.user' cannot be resolved

原因:1.模型定义的时候使用了AbstractUser然后引用了外键关键的是它的迁移文件的序号不是001,所以它无法自动解决。

解决办法:因为先前我是先迁移无结构数据库,所以删掉migrations中除__init.py__的所有文件,然后清空了数据库中的表(因为我的情况是都不是重要数据就全清理了,实在是不想折腾了……)然后迁移有结构的数据库。最后才是迁移无结构数据库内容(这里我注释掉了‘'django_celery_beat',
'django_celery_results'),最后恢复这两个注释的内容,最后在执行了一次`python manage.py migrate`。

在settings.py中我使用的数据库的defult也是根据要迁移的数据库的时候变化的,最后结束的时候是将有结构数据库放在了default中,然后无结构数据库是在下面定义了一个‘mongo1’(因为我使用了mongo,所以随便取得)

最后在放一下他们的定义:

DATABASES = {
    "default": {
        'ENGINE': "django.db.backends.postgresql_psycopg2",
        'NAME': 'dbname',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '5432',
        'ATOMIC_REQUESTS': True,
    },
    "mongodb1": {
        'ENGINE': "djongo",
        'ENFORCE_SCHEMA': False,  # 不会强制执行模式校验
        'NAME': 'dbname',
        'CLIENT': {
            'host': 'localhost',
            'port': 27017,
            'username': 'username',
            'password': 'password',
            'authSource': 'admin',
            'authMechanism': 'SCRAM-SHA-1'
        },
        'LOGGING': {
            'version': 1,
            'loggers': {
                'djongo': {
                    'level': 'DEBUG',
                    'propagate': False,
                }
            },
        },
    }
}

在models.py中的无结构模型有添加:

    def save(self, *args, **kwargs):
        self._state.db = 'mongodb1'  # 指定使用名为 'mongodb1' 的数据库连接
        super(yourmodelname, self).save(*args, **kwargs)

以及在这个文件中,根据我个人的项目情况:

from djongo import models as djongo_models
from django.utils import timezone

import datetime

from django.db import models
from django.contrib.auth.models import AbstractUser

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目介绍】 基于Django协同过滤和spark-als的电影推荐系统源码+项目使用说明+设计报告.zip 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶, 或者实际项目借鉴参考! 当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 说明 1. 新手建议结合pycharm使用,https://www.jetbrains.com/pycharm/,下载专业版试用30天。 2. 注册普通用户通过web界面来设置,创建创建用户通过creeatsuperuser创建。下文有详细命令 3. 导入电影信息通过insert_movies_script.py来操作 (会删除已有的所有信息!) 4. 前端展示 浏览最多,评分最多,收藏最多,写的比较直白,你可以改的委婉点: 最热电影,火爆排行...之类的。每种有10条。 我猜你喜欢为基于用户推荐,item推荐为基于项目推荐。两种推荐思路下文有介绍 系统采用的技术 前端: bootstrap3 css 框架 后端: django 2.2.1 + sqlite3数据库 (MVC框架) 数据: python异步爬虫从豆瓣top250抓取数据,保存到本地csv文件 主要功能: 录入图书信息,用户打分,电影标签分类,电影推荐,电影分享,电影收藏,后台管理系统。 整体采用MVC架构,前端页面通过django template模板来实现,实现了模板的复用功能。同时前端页面的组织结构较为清晰。 推荐算法思路 通过协调过滤计算和其他用户的距离,然后进行筛选。如果用户数量不足,推荐数目不够15条,就会自动从 所有未打分的电影按照浏览数降序选一部分填充进去。 基于用户的推荐 1. 用户需要给电影打分。通过用户已打分的部分来计算相似度,如果用户未打分,或者没有其他用户,则按照浏览数降序返回。 2. 通过pearson算法来计算用户之间的距离,找到距离最近的N个用户。将这些用户已打分的电影(且要推荐的用户未看过的部分)返回。 基于item的推荐 1. 计算物品相似度矩阵: https://www.jianshu.com/p/27b1c035b693 2. 遍历当前用户已打分的item,计算和未打分的item的相似距离。 3. 对相似距离进行排序 返回 主要实现的功能 1. 登录注册页面 2. 基于协同过滤的电影的分类,排序,搜索,打分,排序功能。 3. 基于协同过滤的周推荐和月推荐 4. 观影分享会等活动功能,用户报名功能 (需要额外添加) 5. 发帖留言论坛功能 (要额外添加) 6. 基于spark的ALS算法 (要额外添加) 7. Mysql适配 8. movielens数据集适配 fixed 1. 首页导航栏链接错误 2. 首页面为空 3. 登录注册页面 4. 推荐跳转登录 5. 周推荐用户没有评分时随机推荐 6. 按照收藏数量排序 7. 重新设计了 action 和UserAction model,拆分出了UserAction 电影模型 1. 浏览量 每次刷新页面的浏览数 2. 收藏量 user manytomany field 每个用户收藏一次 3. 评分 rate 每个用户评分一次 4. 在电影下面的评论加点赞功能 安装运行方法 安装依赖 1. 将项目导入pycharm, 在pycharm配置python解释器,3.7及以下都可以。可以通过conda或者其他的虚拟环境来安装 2. 打开终端 输入pip install -r requirements.txt 若提示无pip。去下载get-pip.py 运行python get-pip.py 3. 在pip安装过程如果报错C++ 14依赖问题。则安装c++依赖工具。找不到找我要。如果安装速度过慢,请更换国内镜像https://blog.csdn.net/chenghuikai/article/details/55258957 4. 安装成功后,进入运行阶段 运行 1. 运行服务器: python manage.py runserver 2. 如果无数据,运行项目根目录下的数据迁移脚本 populate开头。 3. python manage.py createsuperuser 创建超级管理员, (密码输入时终端暂时看不到) 4. 进入后台: 127.0.0.1:8000/admin

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值