首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果为NULL,则加载默认值

如果为NULL,则加载默认值
EN

Stack Overflow用户
提问于 2015-07-14 18:11:37
回答 1查看 262关注 0票数 1

我们最近为我们的项目更改了数据库架构的一小部分。最初,其中一列允许为NULL,因为它从未被使用过。我们最近实现了一个利用该列的特性,现在要求它加载一个整数。我们通过将以下内容添加到表定义中实现了这一点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Column("amount", Integer, nullable = False, default = 1)

显然,这仅在我们创建新表时运行。我们的大多数用户都有一个预先存在的数据库,所以我们还运行了一个将所有以前的值转换为1的迁移。这非常有效。

但是,如果用户出于任何原因降级,并对添加行的程序执行某些操作,则该值将再次为空。当它们再次升级时,转换将不会再次运行。这是我们(简单的)迁移过程中的一个限制(它会增加数据库版本,但不会减少,因此它不会知道运行转换,因为数据库已经增加了)

这会导致一个问题,因为现在我们有一个不需要的空值。有没有办法在从数据库加载SQLAlchemy时定义一个默认值,如果该值是非法的,就设置一个默认值?

EN

回答 1

Stack Overflow用户

发布于 2015-07-14 18:19:11

我认为在复杂的系统中降级数据库是一件非常危险的事情。想象一下,在版本X中,您有一个业务规则,它告诉您类似于“在表Y中,所有记录都应该是唯一的”。然后,在版本X+1中,此业务规则失效(已过时,不再有效)。假设用户在版本X +1中工作了一段时间,然后他突然意识到他想要返回到版本X。现在你将拥有版本X,但业务规则被破坏了。

你说的另一件事是(换句话说)如果用户进行了升级,而其他人正在运行(登录或以某种方式)较旧的二进制文件,该怎么办?在这种情况下,我认为这是一个设计问题,您应该检查这是否正在发生(可能在您的数据库中有一个版本字段,并检查您当前的客户端版本是否与数据库版本相同。如果不是,则强制升级当前客户端)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31414190

复制
相关文章
为什么 MySQL 不推荐默认值为 null ?
通常能听到的答案是使用了NULL值的列将会使索引失效,但是如果实际测试过一下,你就知道IS NULL会使用索引,所以上述说法有漏洞。
Java技术栈
2020/12/18
4.9K0
为什么 MySQL 不推荐默认值为 null ?
通常能听到的答案是使用了NULL值的列将会使索引失效,但是如果实际测试过一下,你就知道IS NULL会使用索引,所以上述说法有漏洞。
芋道源码
2021/01/25
3.9K0
Drools规则引擎-如果Fact对象参数为null如何处理
比如对一个企业进行信用评级,涉及三个维度:企业年龄、企业注册资本与企业法人年龄。当然,在这个例子中各项值暂定为都是越高所得的评定分值越高。
程序新视界
2019/08/01
7830
面试高频题,程序员必看!MySQL 为何不推荐默认值为 null ?
通常能听到的答案是使用了NULL值的列将会使索引失效,但是如果实际测试过一下,你就知道IS NULL会使用索引,所以上述说法有漏洞。
二哥聊运营工具
2021/12/17
6920
getClassLoader能否为null
我们Javaer都知道类想要被加载是需要一个个ClassLoader来执行的,并且类加载的方案叫双亲委派模式,说是双亲,其实就是单亲,可能我们最初的翻译人想让我们的加载器的家庭更完整吧,所以翻译成双亲。默认的类加载器包括BootstrapClassLoader、ExtClassLoader、AppClassLoader,他们都定义在在rt.jar中的sun.misc.Launcher类中,他们的”继承”关系是AppClassLoader—>ExtClassLoader—>BootstrapClassLoader,ExtClassLoader的parent获取不到BootstrapClassLoader,只能获取到一个null。
全栈程序员站长
2022/08/24
5980
getClassLoader能否为null
mysql技巧:如果记录存在则更新/如果不存在则插入的三种处理方法
新增一个员工时,如果该员工已存在(以员工号f_emp_code作为判断依据),则更新,否则插入。而且工资f_salary,更新时,不得低于原工资(即:工资只能涨,不能降)。
菩提树下的杨过
2018/12/21
9.3K0
为什么MySQL不建议使用NULL作为列默认值?
blog.csdn.net/qq_30549099/article/details/107395521
肉眼品世界
2021/03/09
4.8K0
Springboot@Autowired注入为Null
SpringBoot项目,在获取resources中application.properties配置文件中的内容时,使用注入Environment方法获取,启动项目之后发现注入的Environment一直为null
itze
2022/10/31
1.2K0
接收参数为null的问题
今天遇到了这样一个问题:Controller层接收到前端传入的参数,传给Service层去使用MyBatis-Plus的xml中查询数据库,结果,在数据库的xml中并没有接收到Service层传过来的参数,参数是一个尴尬的null,这时我就想,好你个前端,你不讲武德,你怎么给我传个null,我劝你耗子尾汁!
关忆北.
2021/12/07
1.6K0
为什么MySQL不建议使用NULL作为列默认值?
今天来分享一道美团高频面试题,5 分钟搞懂“为什么 MySQL 不建议使用 NULL 作为列默认值?”。
一行Java
2023/09/04
4340
为什么MySQL不建议使用NULL作为列默认值?
map key为null_mybatis json
本博主之前一直是网络资源的索取者,本着开源精神愿意把自己在开发过程中遇到过的问题以及解决方案分享给大家,这是我的第一篇博客,希望以后能坚持写博客,让大家少走弯路、少踩坑。 废话少说,直入主题! springcloud微服务集成mybatis动态多数据源在网上有很多文章可以搜到,这里就不重复造轮子了。 如题,网上的很多解决方案比如: 尝试在application.yml 文件中配置 mybatis:callSettersOnNulls:true,对于springboot启动加载yml的单一数据源是有效的,但是在动态多数据源的情况下,是需要自己手动增加数据源配置类:DataSourceConfig.java,并且需要在启动类加上了@SpringBootApplication(exclude ={DataSourceAutoConfiguration.class})注解。 因此,上述解决方案就没用了,下面给出我的解决方案,亲测有效: 1.xml文件
全栈程序员站长
2022/11/10
1.2K0
gradle plugin baseExtension getCompileSdkVersion为null问题
自定义了一个gradle插件,在里面用如下代码获取compileSdkVersion
老马的编程之旅
2022/06/22
3420
mysql decimal设置默认值0 无效,设置后自动变为null(navicat设置decimal默认值失效问题)
alter table fa_user alter column money set default 0;
超级小可爱
2023/02/20
6.1K0
关于 @RequestBody对象为null 的问题
今天遇到了一个非常奇怪的问题,当我在使用@RequestBody 进行传参时,在service层一直获取不到对象值,后台提示错误是空指针异常,找了很久都没有发现是什么问题,结果在最后发现是注解的坑。
木字楠
2022/11/15
1.4K0
关于 @RequestBody对象为null 的问题
CSE下RequestContextHolder.getRequestAttributes()为null
但是RequestContextHolder.getRequestAttributes();这个一直NULL ,我用的CSE框架,测试过SpringBoot,不用注册监听器能正常获取到,但CSE真的头疼,看了很多博客,说是要注入监听器
用针戳左手中指指头
2021/01/29
2.3K0
解决initialize重定向后,session为null
在使用判断用户是否登录时,我们将页面跳转后session会被初始化,因此我们需要先将session保存,同时设置session和cookie的有效期
以星河为聘礼
2021/09/16
1.4K0
解决initialize重定向后,session为null
Java去除对象中为null的字段
如果返回的是对象 model 转成的 json,那么 json 中会存在 “xxxx” : null。和前端进行交互时在使用Swagger调试接口的时候会出现接口数据中有 null值,结果很难看:
Jensen_97
2023/07/20
8000
Java去除对象中为null的字段
@RequestParam 接收参数的值为null处理
@RequestMapping(value = “/test”) public String test( @RequestParam(value = “profit”,required = false,defaultValue = “0”) int profit){ System.out.println(“profit:”+profit); return “success”; } 第一种处理方式(如上图):defaultValue请求参数的默认值,一般和 required = false 一起使用
kirin
2021/03/25
3.3K0
MySQL设置字段的默认值为当前系统时间
问题产生: 当我们在对某个字段进行设置时间默认值,该默认值必须是的当前记录的插入时间,那么就将当前系统时间作为该记录创建的时间。 应用场景: 1、在数据表中,要记录每条数据是什么时候创建的,应该由数据库获取当前时间自动记录创建时间。 2、在数据库中,要记录每条数据是什么时候修改的,应该而由数据数据库获取当前时间自动记录修改时间。 实际开发: 记录用户的注册时间、记录用户最后登录时间、记录用户的注销时间等。 实现步骤:(如果使用数据库远程工具则直接设置,更简单!!!) 首先将数据表中字段的数据类型设置为TIM
赵小忠
2018/01/24
9.3K0
Salesforce Tableau CRM Dashboards,为查询条件设置默认值
Dashboards查询条件,默认情况下,查询所有担当者的金额情报,如下也可以进行自由选择,选择特定用户的情报。
repick
2022/04/24
1.2K0

相似问题

如果为NULL,则分配默认值

20

如果值为null,则使用默认值

12

如果参数为null,则使用默认值

34

如果输入为null,则使用默认值

10

如果路径值为null,则设置默认值

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文