0

我正在从一个 oracle 数据库中检索大量数据,然后将其插入到另一个结构相同的非链接数据库中。

我正在这样做:

select * from xxx where id = parameter

Select COLUMN_NAME from user_tab_columns where table_name=xxx

然后使用 zip 将它们作为 table_name:Data 放入字典中以构建插入

问题是它将日期字段返回为 datetime.datetime(99, 12, 31, 0, 0)。我需要这个作为 2999 年 12 月 31 日。我怎样才能让它像这样返回它,还是我需要创建一个正则表达式来做到这一点?

我对这一切都很陌生,所以如果我的方法看起来很荒谬,请随意说出来并提出更好的方法

非常感谢亚当

4

2 回答 2

1

您可以使用strftime.

例如:

>>> import datetime
>>> print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
2013-08-13 13:10

在你的情况下,这可以使它:

strftime("%d-%b-%Y")

在哪里:

%b     locale's abbreviated month name (e.g., Jan)
%d     day of month (e.g., 01)
%Y     year
于 2013-08-13T11:06:16.173 回答
1

cx_Oracle数据库适配器为您提供datetime.datetime() 对象。如果您需要不同的输出,请使用这些对象上的方法将它们格式化为字符串。

datetime.strftime()方法最适合您的目的:

dtobject.strftime('%d-%b-%Y')

演示:

>>> import datetime
>>> dtobject = datetime.datetime(2999, 12, 31, 0, 0)
>>> dtobject.strftime('%d-%b-%Y')
'31-Dec-2999'

但是,如果 Oracle 确实返回了年份设置为99(not 2999) 的对象,则您需要修复数据:

if dtobject.year < 100:
    dtobject = dtobject.replace(year=dtobject.year + 2900)
于 2013-08-13T11:06:31.210 回答