Python csv_writer: 更改oracle日期列的输出格式
Python csv_writer: Change the output format of a oracle date column
我有一个带有日期列的 table,我想将该列格式化为 csv 文件中的 DD.MM.YYYYY,但更改会话不会影响 python csv_writer .
有没有办法在不使用 sql 代码中的 to_char 的情况下处理所有日期列?
file_handle=open("test.csv","w")
csv_writer = csv.writer(file_handle,dialect="excel",lineterminator='\n',delimiter=';',quoting=csv.QUOTE_NONNUMERIC)
conn=cx_Oracle.connect(connectionstring)
cur = conn.cursor()
cur.execute("ALTER SESSION SET NLS_DATE_FORMAT = 'DD.MM.YYYY HH24:MI:SS'")
cur.execute("select attr4,to_char(attr4,'DD.MM.YYYY') from aTable")
rows = cur.fetchmany(16000)
while len(rows) > 0:
csv_writer.writerows(rows)
rows = cur.fetchmany(16000)
cur.close()
结果:
"1943-04-21 00:00:00";"21.04.1943"
"1955-12-22 00:00:00";"22.12.1955"
"1947-11-01 00:00:00";"01.11.1947"
"1960-01-07 00:00:00";"07.01.1960"
"1979-12-01 00:00:00";"01.12.1979"
您看到的输出来自于查询结果被转换为相应的 python 数据类型 - 因此第一列的值是 datetime
对象,第二列 - 字符串(由于您在查询中进行了 to_char()
转换 )。 NLS_DATE_FORMAT
仅控制普通(用户)客户端的输出。
因此 csv 中的输出只是 python 的 datetime
的默认表示;如果你想以不同的形式输出,你只需要改变它。
由于查询响应是一个元组列表,您不能就地更改它 - 它必须被复制和修改;或者,您可以逐行编写,修改。
这里只是第二种方法的写入部分:
import datetime
# the rest of your code
while len(rows) > 0:
for row in rows:
value = (row[0].strftime('%d.%m.%Y'), row[1])
csv_writer.writerow(value)
rows = cur.fetchmany(16000)
作为参考,这里是 python 的 strftime directives 的简短列表。
我有一个带有日期列的 table,我想将该列格式化为 csv 文件中的 DD.MM.YYYYY,但更改会话不会影响 python csv_writer .
有没有办法在不使用 sql 代码中的 to_char 的情况下处理所有日期列?
file_handle=open("test.csv","w")
csv_writer = csv.writer(file_handle,dialect="excel",lineterminator='\n',delimiter=';',quoting=csv.QUOTE_NONNUMERIC)
conn=cx_Oracle.connect(connectionstring)
cur = conn.cursor()
cur.execute("ALTER SESSION SET NLS_DATE_FORMAT = 'DD.MM.YYYY HH24:MI:SS'")
cur.execute("select attr4,to_char(attr4,'DD.MM.YYYY') from aTable")
rows = cur.fetchmany(16000)
while len(rows) > 0:
csv_writer.writerows(rows)
rows = cur.fetchmany(16000)
cur.close()
结果:
"1943-04-21 00:00:00";"21.04.1943"
"1955-12-22 00:00:00";"22.12.1955"
"1947-11-01 00:00:00";"01.11.1947"
"1960-01-07 00:00:00";"07.01.1960"
"1979-12-01 00:00:00";"01.12.1979"
您看到的输出来自于查询结果被转换为相应的 python 数据类型 - 因此第一列的值是 datetime
对象,第二列 - 字符串(由于您在查询中进行了 to_char()
转换 )。 NLS_DATE_FORMAT
仅控制普通(用户)客户端的输出。
因此 csv 中的输出只是 python 的 datetime
的默认表示;如果你想以不同的形式输出,你只需要改变它。
由于查询响应是一个元组列表,您不能就地更改它 - 它必须被复制和修改;或者,您可以逐行编写,修改。
这里只是第二种方法的写入部分:
import datetime
# the rest of your code
while len(rows) > 0:
for row in rows:
value = (row[0].strftime('%d.%m.%Y'), row[1])
csv_writer.writerow(value)
rows = cur.fetchmany(16000)
作为参考,这里是 python 的 strftime directives 的简短列表。