python覆盖数据库重复数据_如何在数据库中插入唯一数据/处理重复数据

权限vs宽恕

在Python中,请求原谅比请求许可(EAFP)更为习惯EAFP:

Easier to ask for forgiveness than permission. This common Python coding style assumes the existence of valid keys or attributes and catches exceptions if the assumption proves false. This clean and fast style is characterized by the presence of many try and except statements. The technique contrasts with the LBYL style common to many other languages such as C.

在这一点上,你的方法更好。在

“先看后跳版本”(LBYL)中的竞争条件

无论您做什么检查,以确保没有重复,都可能在您插入时过时。所以很有可能在你的检查结果为绿灯后,你程序的另一个实例(例如另一个烧瓶工人)会添加一行。在

这对您尤其有害,因为您的情况B是这样的,如果该检查被清除,就不会发生任何异常,这可能会完全停止程序的执行。所以案例A很容易获胜。在

性能:两个查询对一个查询+a可能的异常

另外,您的第二个方法总是发生在两个查询中(一个要检查,一个要添加),而第一个方法只有在重复的情况下抛出异常

所以我认为您的案例A更好(只有在有重复的情况下才处理异常)

不过,不要撒网太广,抓住一个重点突出的例外

我看到的唯一挑剔之处是您应该使用except:(网络太宽),而应该使用一个特定的异常,当您插入一个重复的行时,该异常会抛出。在

假设在这种情况下抛出的是一个IntegrityError,我们应该这样做try:

# Insert a potentially duplicate row

except IntegrityError:

# Deal with the case

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值