在Python中验证Oracle日期

时间:2009-03-12 18:41:21

标签: python oracle validation

我们的Python CMS将一些日期值存储在通用“属性”表的 varchar 列中。其中一些日期稍后会移动到包含实际日期列的表中。如果CMS用户输入了无效日期,则在迁移时,当查询失败并显示“无效字符串日期”错误时,它不会被捕获。

如何使用Python确保放入CMS的所有日期都是有效的Oracle字符串日期表示?

3 个答案:

答案 0 :(得分:5)

  

如何使用Python确保放入CMS的所有日期都是有效的Oracle字符串日期表示?

我稍微改变了一下。让Python尽可能宽松地解析原始日期输入,然后以已知良好的表示形式输出日期。

dateutil的自由解析器可能是一个很好的起点:

import dateutil.parser
d= dateutil.parser.parse('1/2/2003')
d.strftime('%d-%b-%y')

我不确定'%d-%b-%y'实际上仍然是Oracle的正确日期格式,但它可能是类似的,理想情况下是四位数年份,不依赖于月份名称。 (陷阱:%b依赖于语言环境,因此可能会在非英语操作系统上返回不需要的月份名称。)也许“strftime('%Y-%m-%d')”后跟“TO_DATE(...,'YYYY) -MM-DD')“在Oracle端需要吗?”

答案 1 :(得分:1)

Oracle识别为日期的日期字符串格式是数据库的可配置属性,因此依赖于将字符串隐式转换为日期而被视为不良格式。

通常,Oracle将格式设置为'DD-MON-YYYY',但您不能总是依赖它以这种方式设置。

就个人而言,我会让CMS以“YYYY-MM-DD”等标准格式写入此“属性”表,然后将其转移到DATE列的任何作业都可以使用to_date显式转换值(值,' YYYY-MM-DD')你不会有任何问题。

答案 2 :(得分:-1)

尽早验证。为什么不在Python CMS中将日期存储为日期?

很难知道像'03 -04-2008'这样的字符串是什么日期。是2008年4月3日还是2008年3月4日?一位美国人会说2008年3月4日,但荷兰人会说2008年3月3日。