簡體   English   中英

Python cx_Oracle 以毫秒為單位插入時間戳

[英]Python cx_Oracle Insert Timestamp With Milliseconds

我已閱讀以下帖子: 使用 cx_Oracle 和 Python 3.6sqlserver 日期時間在 Oracle 中以毫秒為單位插入 TIMESTAMP 到 ZA189C633D9995E11BF8607170EC94

因為,我的 Oracle 表的列數不止一個。

我已經測試了上述兩個鏈接(感謝他們)。 然而,它們的效率是有限的。 例如,如果 Oracle 表上的時間戳列的列順序不是 1,則設置 cursor.setinputsizes(cx_Oracle.TIMESTAMP) 不起作用。

根據 Panagiotis Kanavos( sqlserver datetime 到 oracle 時間戳問題):

ts = datetime.datetime.now()
cursor.prepare("INSERT INTO python_tstamps VALUES(:t_val)")

cursor.setinputsizes(t_val=cx_Oracle.TIMESTAMP)

cursor.execute(None, {'t_val':ts})
db.commit()

另一方面,我有多個記錄要插入,比如 ~250k。 So, I need to fetch all my data and convert to them into dictionary, and finally append that dictionary object to a list in order to use input object in executemany function.

column_name = ["instance_id", "record_id", "record_id1"]

dict1 = dict(zip(column_name,outputsql[0]))

for key in dict1:
    print(key)

t = []
t.append(dict1)
cursororacle.prepare("INSERT /*+ append */INTO schematest.test  VALUES (:instance_id, :record_id, :record_id1)")
cursororacle.setinputsizes(instance_id=cx_Oracle.TIMESTAMP, record_id=cx_Oracle.TIMESTAMP)
cursororacle.executemany(None, t)

轉換 25 萬條記錄效率不高。 還有其他解決方案嗎?

編輯:我想插入我的 output 數據(outputsql)而不進行字典轉換。 可能嗎; 如果是那怎么辦?

提前致謝!

Ps: outputsql 是另一個 db session 查詢的 output ,它以正確的毫秒精度返回記錄。

cursorsql = connsql.cursor()
cursorsql.execute('select top 1  record_id, instance_id, record_id from dbo.recordlog  (nolock)')
outputsql = cursorsql.fetchall()

無需將數據轉換為字典。 cursor.setinputsizes()文檔顯示您可以傳遞位置 arguments 或關鍵字 arguments。 因此,如果您需要指示第三列應該是時間戳,您可以執行以下操作:

cursor.setinputsizes(None, None, cx_Oracle.TIMESTAMP)

這樣做是說前兩個綁定位置可以使用默認綁定。 這將通過檢查cursor.execute()cursor.executemany()時提供的數據來確定。 第三個綁定 position 將綁定為時間戳列。

我希望這足夠清楚!

暫無
暫無

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

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