导航:首页 > 编程语言 > nls函数python

nls函数python

发布时间:2022-08-18 18:53:31

A. 我用python连接数据库查询,字符是外文字符,获取后都是“”

编写的python脚本中需要加入如下几句:
import os
os.environ['NLS_LANG']
= 'SIMPLIFIED CHINESE_CHINA.UTF8'
这样可以保证select出来的中文显示没有问题。

B. python怎么设置环境变量

os.environ
例如,设置 oracle 编码
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

C. python调用oracle的sql中wm_concat问题:

利用python调用sqlplus来输出结果的例子:
import os
import sys
from subprocess import Popen, PIPE
sql = """
set linesize 400
col owner for a10
col object_name for a30
select owner, object_name
from dba_objects
where rownum<=10;
"""
proc = Popen(["sqlplus", "-S", "/", "as", "sysdba"], stdout=PIPE, stdin=PIPE, stderr=PIPE)
proc.stdin.write(sql)
(out, err) = proc.communicate()
if proc.returncode != 0:
print err
sys.exit(proc.returncode)
else:
print out
用Python查询Oracle,当然最好用cx_Oracle库,但有时候受到种种限制,不能安装Python第三方库,就得利用现有资源,硬着头皮上了。
用Python调用SqlPlus查询Oracle,首先要知道SqlPlus返回结果是什么样的:
(这是空行)
Number Name Address
------------ ----------- ------------------
1001 张三 南京路
1002 李四 上海路
第1行是空行,第2行是字段名称,第3行都是横杠,有空格隔开,第4行开始是查询到的结果。
在查询结果规整的情况下,根据第3行可以很清晰的看到结构,用Python解析起来也比较方便。但是,如果一张表字段特别多,记录数也相当多,那么默认情况下调用SqlPlus查询出的结果会比较乱,这就需要在调用查询之前做一些设定,比如:
set linesize 32767
set pagesize 9999
set term off verify off feedback off tab off
set numwidth 40
这样的调用查询结果就比较规整了。接下来就是用强大的Python来解析查询结果。
这里封装了一个函数,可以根据传入的SQL语句查询并解析结果,将每行结果存到列表中,列表中的每个元素是一个字段名称与值的映射。
#!/usr/bin/python
#coding=UTF-8
'''
@author: 双子座@开源中国
@summary: 通过SqlPlus查询Oracles数据库
'''
import os;
os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.AL32UTF8'
gStrConnection = 'username/[email protected]:1521/ora11g'
#解析SqlPlus的查询结果,返回列表
def parseQueryResult(listQueryResult):
listResult = []
#如果少于4行,说明查询结果为空
if len(listQueryResult) < 4:
return listResult
#第0行是空行,第1行可以获取字段名称,第2行可获取SQLPlus原始结果中每列宽度,第3行开始是真正输出
# 1 解析第2行,取得每列宽度,放在列表中
listStrTmp = listQueryResult[2].split(' ')
listIntWidth = []
for oneStr in listStrTmp:
listIntWidth.append(len(oneStr))
# 2 解析第1行,取得字段名称放在列表中
listStrFieldName = []
iLastIndex = 0
lineFieldNames = listQueryResult[1]
for iWidth in listIntWidth:
#截取[iLastIndex, iLastIndex+iWidth)之间的字符串
strFieldName = lineFieldNames[iLastIndex:iLastIndex + iWidth]
strFieldName = strFieldName.strip() #去除两端空白符
listStrFieldName.append(strFieldName)
iLastIndex = iLastIndex + iWidth + 1
# 3 第3行开始,解析结果,并建立映射,存储到列表中
for i in range(3, len(listQueryResult)):
oneLiseResult = unicode(listQueryResult[i], 'UTF-8')
fieldMap = {}
iLastIndex = 0
for j in range(len(listIntWidth)):
strFieldValue = oneLiseResult[iLastIndex:iLastIndex + listIntWidth[j]]
strFieldValue = strFieldValue.strip()
fieldMap[listStrFieldName[j]] = strFieldValue
iLastIndex = iLastIndex + listIntWidth[j] + 1
listResult.append(fieldMap)
return listResult
def QueryBySqlPlus(sqlCommand):
global gStrConnection
#构造查询命令
strCommand = 'sqlplus -S %s <<!\n' % gStrConnection
strCommand = strCommand + 'set linesize 32767\n'
strCommand = strCommand + 'set pagesize 9999\n'
strCommand = strCommand + 'set term off verify off feedback off tab off \n'
strCommand = strCommand + 'set numwidth 40\n'
strCommand = strCommand + sqlCommand + '\n'
#调用系统命令收集结果
result = os.popen(strCommand)
list = []
for line in result:
list.append(line)
return parseQueryResult(list)
其中os.environ['NLS_LANG']的值来自
select userenv['language'] from al;
在调用的时候,只要类似:
listResult = QueryBySqlPlus('select * from studentinfo')
然后就可以用循环打印出结果了。

D. R语言使用nls拟合,为什么总说循环次数大于50

nls的数据源必须有误差。不能精确等于公式返回值(零残差)。循环次数大于50通常是使用 函数精确返回值 作为数据源去拟合函数。必须给y值加上随机误差。


z=function(x,a,b){a*sin(x)+b*cos(x)}
x=seq(1,10,9/500)
y=z(x,1,1)#a=1b=1是期望拟合出的结果。
cor=data.frame(x=x,y=y)
cor$res=runif(length(cor$x),min=-0.005,max=0.005)
cor$yres=cor$y+cor$res
#yres=y加上随机误差,y是精确返回值
>nls(cor$yres~z(cor$x,a,b),data=cor,start=list(a=0.8,b=1.3))
Nonlinearregressionmodel
model:cor$yres~z(cor$x,a,b)
data:cor
ab
0.99991.0002
resialsum-of-squares:0.004213

:1
Achievedconvergencetolerance:2.554e-07

#使用精确返回值拟合就会出错。
>nls(cor$y~z(cor$x,a,b),data=cor,start=list(a=1,b=1))
Errorinnls(cor$y~z(cor$x,a,b),data=cor,start=list(a=1,b=1)):
循环次数超过了50这个最大值

E. oracle中的NLS_INITCAP、NLS_LOWER、NLS_UPPER函数

SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序

SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序

SCHINESE_PINYIN_M 按照拼音排序
排序用
比如select nls_initcap('网络知道', 'nls_sort= SCHINESE_STROKE_M')
from al;

阅读全文

与nls函数python相关的资料

热点内容
怎么更改安卓程序级别 浏览:393
安卓系统运行慢怎么办呢 浏览:808
外地人在买车本地可以解压嘛 浏览:907
相册软件加密怎么取消 浏览:251
麦克风app怎么打开 浏览:22
java泛型t和 浏览:356
计算机英文pdf 浏览:587
单片机控制的直流调速系统 浏览:126
抖音上解压视频书单号怎么做 浏览:165
软件加密之后忘了密码怎么办 浏览:944
文件夹怎么弹出来的 浏览:209
51单片机引脚图电路 浏览:214
麦当劳员工怎么登录app 浏览:530
目前什么系统编程语言最好 浏览:488
破晓传说未加密 浏览:450
农信app里面怎么查收款明细 浏览:263
android打印小票 浏览:168
小程序支付php 浏览:609
oppo手机文件夹红色 浏览:486
android权威编程源码 浏览:601