一个Django项目在win环境pycahrm下运行的好好的,部署到Linux就出现了编码错误
涉及的代码段使用了cx_oracle执行sql语句,打印出来粘贴到plsql执行是正常的。
sql = '''select nvl(s.username, 'None') oracle_user,
s.logon_time,
p.username unix_user,
s.sid,
s.serial# serial,
p.spid unix_pid,
s.status,
s.process,
s.osuser,
s.program,
s.module,
s.machine,
s.event,
l.SQL_TEXT,
s.sql_id,
s.prev_sql_id,
'ps -ef|grep '|| p.spid ||'|grep LOCAL=NO|awk ''{print $2}''|xargs kill -9' kill_sh
from v$process p, v$session s, v$sql l
where s.paddr = p.addr
and s.SQL_ADDRESS = l.ADDRESS(+)
and s.SQL_HASH_VALUE = l.HASH_VALUE(+)
and s.sql_child_number = l.child_number(+)
and s.sid = %s''' %session_id
oracle_sessions = tools.oracle_django_query(user,password,url,sql)
在文件头按下面指定字符集没用
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
试了很多种方法都解决不了。
最后还是在错误信息里面发现了一些线索:
看来django的错误提示还是很有用的,虽然出错的原因很难解释,至少给出了错误的地址。之前一直都不太重视,闷头找答案。
更改了sql语句部分后,恢复了正常
where s.paddr = p.addr and s.SQL_ADDRESS = l.ADDRESS(+)
and s.SQL_HASH_VALUE = l.HASH_VALUE(+)
and s.sql_child_number = l.child_number(+)
and s.sid = %s''' %session_id