簡體   English   中英

Python csv_writer:更改oracle日期列的輸出格式

[英]Python csv_writer: Change the output format of a oracle date column

我有一個帶有日期列的表,並希望在csv文件中將該列格式化為DD.MM.YYYYY,但alter session不會影響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指令的簡短列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM