首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL + Django:save()之后没有obj.id

在这个问答内容中,我们有两个关键词:MySQL 和 Django。MySQL 是一种流行的关系型数据库管理系统,而 Django 是一种基于 Python 的高级 Web 开发框架。

在 Django 中,我们可以使用 ORM(Object-Relational Mapping)来操作数据库。当我们使用 Django 的 save() 方法来保存一个对象时,该对象的 id 属性会自动填充,因为在数据库中,每个记录都有一个唯一的主键 id

如果在使用 save() 方法后,obj.id 仍然为空,可能有以下原因:

  1. 数据库表中没有设置主键。在 Django 中,如果没有明确指定主键,Django 会自动为每个模型添加一个名为 id 的主键字段。请检查数据库表的结构,确保有一个名为 id 的主键字段。
  2. 对象尚未保存到数据库。在 Django 中,如果对象尚未保存到数据库,obj.id 将为空。请确保在访问 obj.id 之前已经调用了 save() 方法。
  3. 使用了自定义的主键字段。如果在模型中使用了自定义的主键字段,请确保该字段名称和数据库表中的主键字段名称相同。

如果以上原因都不符合,请检查 Django 和 MySQL 的日志,以获取更多关于错误的详细信息。

推荐的腾讯云相关产品:

  1. 腾讯云数据库 MySQL:提供高性能、高可用、强安全的 MySQL 数据库服务,支持一键部署、备份恢复、监控告警等功能。
  2. 腾讯云云数据库 TencentDB for MongoDB:提供高性能、高可用、强安全的 MongoDB 数据库服务,支持一键部署、备份恢复、监控告警等功能。
  3. 腾讯云云数据库 TencentDB for Redis:提供高性能、高可用、强安全的 Redis 数据库服务,支持一键部署、备份恢复、监控告警等功能。

产品介绍链接地址:

  1. 腾讯云数据库 MySQL:https://cloud.tencent.com/product/cdb-mysql
  2. 腾讯云云数据库 TencentDB for MongoDB:https://cloud.tencent.com/product/tcb-mongodb
  3. 腾讯云云数据库 TencentDB for Redis:https://cloud.tencent.com/product/tcb-redis
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 利用django model save方法对未更改的字段依然进行了保存

    () handler(obj.id) obj.age = 10 obj.save() print obj.name 最终的name结果依然为’abc’。...save()保存时,虽然没有更改其它字段,但依然会将内存中的值,再次存入数据库,子函数和其它进程更改的值会被覆盖。...补充知识:Django Signals之pre_save & post_save ,pre_delete & post_delete Listening to signals(信号监听) To receive...下面将针对本文标题来做示例: django.db.models.signals.pre_save & django.db.models.signals.post_save Sent before or...和save的运行逻辑一样,pre信号先触发,post后触发 以上这篇利用django model save方法对未更改的字段依然进行了保存就是小编分享给大家的全部内容了,希望能给大家一个参考。

    1.7K10

    一种能够快速进阶的学习方式

    object info if object.count() >=1: then return object.info else: obj = object.info obj.id...= id obj.name = name obj.save() return obj 而插入防火墙信息,是一个POST请求,看起来是两个截然不同的操作,但是我们也可以集成一下...= id obj.name = name obj.save() return obj 这样看来,其实一个查询和插入的操作,如果从完善的角度来看,其实步骤是很相似的。...就这样我下载了Django的源代码,对于我来说,我最喜欢Django的地方恰恰就在于ORM,当然我只用到了里面最基本的功能,对于外键等复杂功能一概不用。包括到了现在回过头来看,当时的选择还是正确的。...这里完全没有捷径,这是你走的时候会更加有方向感,除此之外,每个人的收获就和出发点和态度密切关联了。 好了,Flag立好了,打不打脸就看自己的决心和毅力了。欢迎拍砖,欢迎建议。

    30610

    Django的用户表创建(四)

    在完成了之前的事情之后,接下来就是实现注册功能了。...---------》数据库里的字段 类实例对应---------》数据库表里的一行数据 obj.id obj.name…..类实例对象的属性 也就是说django与数据库的交互被写在了黑盒子里面了,如果我们要用只需要知道输入...,不用管黑盒子是MySQL、Oracle、sqlite还是其他乱七八糟的数据库,它都会按照我们的需求输出正确的操作。...但是写了这些还不够的,因为用户名,密码,邮箱等都需要进行一定的约束,id一般是作为主键 知道了这个之后,就需要想办法解决了,但是受限于我的编码经验,所以我选择借鉴django大佬的代码。...之后修改models之后在使用makemigrations [app name] 和migrate [app name]就可以修改表结构了。

    2.2K60

    mysql安装成功之后没有找到my.ini配置文件怎么办

    不知道大家有没有遇到过这个问题,已经安装完成mysql,并且成功使用,重启电脑之后,数据没了,mysql也无法登录。需要配置一下my.ini,但是my.ini都没有找到。...先查找 C:\ProgramData\MySQL\目录中寻找,如果没有找到再使用下面这个方法。...在使用ZIP安装时,安装好之后默认也是没有my.ini配置文件的: 当我们想修改数据库的配置信息如 wait_timeout、interactive_timeout、max_connections 或大小写敏感时...删除完成之后,最好去电脑的服务窗口看下,如果找不到MySql服务,说明已经已经删除成功。 如果还能看到MySql服务,可以手动右击选择”停止“,服务停止之后就会自动消失了。 2....6.1 登陆mysql# 命令: D:\MySql\bin>mysql -u root -p 这时密码为空,不需要填写,直接回车: 如果这里没有登陆成功,请移步下一章”重置MySql密码“~ 6.2

    14.6K31

    博客将 Django 1.11+ 升级到 Django 2.2+ 遇到的问题及规避方法

    之前就有人一直催我把博客的 Django 升级到 Django 2.0 以上,但是我一直懒得升级,因为我早就看过 Django 2.x 版本和 1.11.x 版本,其实没有太多的不同,所以没有找到需要升级的必要...PyMySQL 版本报错 报错现象 将 Django 升级到 2.2 以上版本之后,会发现如下报错: ......__version__) 网上说注释掉上面两行之后还会出现编码格式问题(我暂时没有发现),需要修改如下文件: # G:\envs\izone\Lib\site-packages\django\db\backends...因为在 Django 1.x 的版本中,这个参数是有默认值的,但是 Django 2.x 没有指定,所以需要显示设定一个值。...规避方法 修改之后,我的代码如下: ud = obj.update_date.strftime("%Y%m%d%H%M%S") md_key = '{}_md_{}'.format(obj.id, ud

    96720

    Django---ORM操作大全

    ---------》数据库里的字段 类实例对应---------》数据库表里的一行数据 obj.id  obj.name.....类实例对象的属性 Django orm的优势: Django的orm操作本质上会根据对接的数据库引擎...,翻译成对应的sql语句;所有使用Django开发的项目无需关心程序底层使用的是MySQL、Oracle、sqlite.......,如果数据库迁移,只需要更换Django的数据库引擎即可; 一、Django连接MySQL 1、创建数据库 (注意设置 数据的字符编码) 由于Django自带的orm是data_first类型的ORM,...这个报错:因为表创建好之后,新增字段没有设置默认值,或者原来表中字段设置了不能为空参数,修改后的表结构和目前的数据冲突导致; 二、modles.py创建表 ORM字段介绍 Djan提供了很多字段类型,比如...URL/Email/IP/ 但是mysql数据没有这些类型,这类型存储到数据库上本质是字符串数据类型,其主要目的是为了封装底层SQL语句; 1、字符串类(以下都是在数据库中本质都是字符串数据类型,此类字段只是在

    6.9K100
    领券