使用 python 代碼將資料從 csv 檔案加載到 oracle db 中。將資料加載到 oracle db 后,真值顯示為 1,假值顯示為 0 Iam 使用以下 python 代碼:
import cx_Oracle as orcCon
from cx_Oracle import DatabaseError
import pandas as pd
import csv
csv_input=pd.read_csv(r"E:\Python_projects\test\python1.csv",index_col=False,na_values=" ").fillna('')
#csv_input.head()
#print(csv_input)
try:
conn = orcCon.connect('scott/tiger@localhost:1522/orcl',encoding="UTF-8")
if conn:
print("cx_Oracle version:", orcCon.version)
print("Database version:", conn.version)
print("Client version:", orcCon.clientversion())
# Now execute the sqlquery
cursor = conn.cursor()
print("You're connected.................")
print("TRUNCATING THE TARGET TABLE")
cursor.execute("TRUNCATE TABLE PYTHON_TESTING")
print("Inserting data into table")
for i,row in csv_input.iterrows():
sql = "INSERT INTO PYTHON_TESTING(C1,C2,C3)VALUES(:1,:2,:3)"
cursor.execute(sql, tuple(row))
# the connection is not autocommitted by default, so we must commit to save our changes
conn.commit()
#print("Record inserted successfullly")
except DatabaseError as e:
err, = e.args
print("Oracle-Error-Code:", err.code)
print("Oracle-Error-Message:", err.message)
finally:
cursor.close()
conn.close()
我已將測驗 csv 檔案創建為:

當加載到 Oracle 表資料中的資料顯示為:

我正在使用 python 3.9.2
uj5u.com熱心網友回復:
您正在將 Pythonbool資料型別轉換為(Oracle 方言)SQLVARCHAR2資料型別。在 SQL 中,Oracle 沒有布林值的概念,因此必須存在從一種資料型別到另一種資料型別的映射,典型的映射使用是True => 1和False => 0(如果在 Python 中您嘗試,True == 1則輸出為,True但如果您嘗試,True == 'True'則輸出為False)。
因此,您的 Python 代碼映射bool到一個整數并將其傳遞給 Oracle,然后 Oracle 將隱式轉換為從數字到字串。
您需要打破隱式轉換鏈并對您期望的字串值進行顯式轉換。
一種方法是將數字真值映射到字串文字并且可以使用:
INSERT INTO PYTHON_TESTING(C1,C2,C3)
VALUES(
CASE :1 WHEN 1 THEN 'TRUE' ELSE 'FALSE' END,
CASE :2 WHEN 1 THEN 'TRUE' ELSE 'FALSE' END,
CASE :3 WHEN 1 THEN 'TRUE' ELSE 'FALSE' END
);
另一種方法是在 Python 中將元組值從bool字串轉換為字串;就像是:
cursor.execute(sql, tuple('TRUE' if col else 'FALSE' for col in row))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/369932.html
