原本我的電腦已有python腳本連線Oracle資料庫並取得資料,當時是用python 2.7來執行,沒有什麼問題。
最近重灌系統之後,安裝Python 3.7、cx_Oracle套件、Oracle instant client 11.2,都是64位元的版本。
重新執行腳本時卻出現如下的錯誤訊息:
Database Version:11.2.0.4.0
Traceback (most recent call last):
File "F:\Ora_LineNotify\EBS_Check.py", line 107, in <module>
cur.execute(SQL02)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 45-46: ordinal not in range(128)
一開始以為是腳本編碼的問題,但是檢查過後文字是以UTF-8編輯的。
詳細看一下錯誤訊息,是在執行SQL2時出現的錯誤,而字串SQL2中只有一個地方有中文字,而且只要把中文改成英文,腳本又正常了
SQL02=("select to_char(start_time,'yyyy-mm-dd') as \"日期\",status " .....
所以可以確定是cx_Oracle的問題,於是更改搜尋的目標,找到了可能是NLS_LANG的問題。
我可以確定資料庫上是以AMERICAN_AMERICA.ZHT16BIG5來編碼,於python腳本中增加下列程式碼後又恢復正常了。
import os
os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.ZHT16BIG5'
上面主要是設定系統的環境變數NLS_LANG
-
Windows7 / Windows8 kill process Linux下要刪除某個程序通常會使用 ps 配合 kill 來刪除程序。 例如:ps -ef |grep [PROCESS NAME] kill -9 [PID] 在Windows下,通常是...
-
在電腦版的Line輸入文字時,遇到需要換行的情形時,我都是用記事本先寫好再複製上去,這樣就可以有換行的效果,可是這樣的做法好像失去Line的便利性。 於是查了一下,原來有一個設定可以指定Enter換行,而不是發訊息出去。 完成設定之後,要發送訊息就改用Al...
-
利用Win 10的工作排程器來設定每日自動執行的批次檔,單獨執行批次檔沒問題,但是放在排程上就是無法執行。 後來試了幾種網路上提供的方式,其注意的事項如下: 1、在「安全性選項」選擇「只有使用者登入時才執行」並取消「以最高權限執行」。 2、在「設定」中選擇「Win...