Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13169
  • 博文数量: 3
  • 博客积分: 94
  • 博客等级: 民兵
  • 技术积分: 45
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-30 20:52
文章分类
文章存档

2012年(3)

我的朋友

分类: Python/Ruby

2012-04-30 21:06:35

    一直膜拜python的各种库函数,以为他们都是完美无缺的。这周居然连续发现两处python2.4上MySQLdb模块的bug,看来《软件工程》讲的很有道理:所有软件都是有bug的,只有隐藏的深不深而已。
    [1] executemany()函数接受两个参数sql和params,sql是要执行的sql语句,params是列表(list),包含了一个或者多个适用于sql语句的元组。查看源代码发现,它会判断sql语句是不是包含values子句(使用正则表达式search,居然没有忽略大小写?) 如果存在values子句,则拼凑成多个insert into ... values(..),(..),(..)的形式。但是它的拼凑逻辑没有考虑insert into ... values(..) on duplicate key update ...这种句式,导致params中含有超过一个元组时sql执行必出错。
    [2] 当sql语句中包含case when子句作为结果返回,所有的case都返回int型时,返回值居然是str类型。或许MySQL需要统一返回值的类型,但是所有列都是int而得到的结果还是str,这多少有点说不过去。
    所幸python2.7的MySQLdb已经修正了上述两个问题。最讨厌不稳定的东西,如果底层的东西都不可靠,又怎能写好稳定的软件呢?我对稳定性的追求已经超过了性能和扩展性本身。人总该有点偏执的,没有棱角的人早就被淘汰掉了。以后果断用高版本的python。
阅读(1139) | 评论(3) | 转发(0) |
0

上一篇:没有了

下一篇:MySQL扩展语法

给主人留下些什么吧!~~

3783335812012-05-06 11:25:22

呵呵,有点意思,不错

图片MM2012-05-04 22:20:38

这个不容易引起注意啊~多谢分享了~~

桔色花朵2012-05-03 22:03:26

!!!受有同感~~真心感觉高版本的才行啊