python cx_Oracle 의 기본 사용 방법(연결 및 첨삭 검사)
python 을 사용 하여 Oacle 데이터 베 이 스 를 조작 하고 표 의 몇 개의 필드 를 변수 값 으로 사용 합 니 다.
Popen+sqlplus 를 사용 하 는 방법 은 형식 을 제어 해 야 합 니 다.흐름 을 통 해 이 필드 값 이 간결 하지 않 습 니 다(개인 적 인 관점...)sql 플러스 를 사용 하 는 방법 으로 sql 파일 에 직접 접근 할 수 있다 는 장점 이 있 습 니 다.연결 을 열 거나 닫 는 것 을 고려 하지 않 아 도 되 고 흐름 파일 에 기록 하 는 것 도 좋 습 니 다.그러나 장점 은 이번에 주목 한 것 이 아니다)
cx-Oracle 을 사용 하여 검색 결 과 를 tuple 형식 으로 되 돌려 주 고 결 과 를 되 돌려 주 는 작업 이 간결 하 며 수 요 를 만족 시 킵 니 다.(데이터베이스 연결 생 성 및 닫 기,sql 작성,사전 처리 및 제출 등 도 간결 하지 않 습 니 다(같은 개인 관점...)
기초 방법
데이터베이스 연결
1.tns 직렬 연결 사용
oracle_tns = cx_Oracle.makedsn('XXX.XXX.XXX.XXX', 1521,'oracleName')
connectObj = cx_Oracle.connect('oracleUserName', 'password', oracle_tns)
2.기타 간결 한 방식
db = cx_Oracle.connect('hr', 'hrpwd', 'localhost:1521/XE')
db1 = cx_Oracle.connect('hr/hrpwd@localhost:1521/XE')
데이터베이스 연결 끊 기
connectObj.close()
커서 만 들 기
cursorObj = connectObj.cursor()
커서 닫 기
cursorObj.close()
늘다1.단일 삽입:
sql = "INSERT INTO T_AUTOMONITOR_TMP(point_id) VALUES(:pointId)"
cursorObj.prepare(sql)
rown = cursorObj.execute(None, {'pointId' : pointId})
connectObj.commit()
2.여러 개의 삽입:
sql = "INSERT INTO T_AUTOMONITOR_TMP(point_id) VALUES(:pointId)"
cursorObj.prepare(sql)
rown = cursorObj.executemany(None, recordList)
connectObj.commit()
삭제 하 다.
sql = "DELETE FROM T_AUTOMONITOR_TMP t WHERE t.point_id = :pointId "
cursorObj.prepare(sql)
rown = cursorObj.execute(None, {'pointId' : pointId})
connectObj.commit()
고치다.
sql = "UPDATE t_automonitor_other t\
SET t.active = '2'\
WHERE t.active = '1'\
AND t.point_id = :pointId\
"
cursorObj.prepare(sql)
cursorObj.execute(None, {'pointId' : pointId})
connectObj.commit()
조사 하 다.
sql = "SELECT t.describ FROM t_automonitor_tmp t WHERE t.point_id = :pointId"
cursorObj.prepare(sql)
cursorObj.execute(None, {'pointId' : pointId})
Tips
r1 = cursor.execute('SELECT * FROM locations WHERE country_id=:1 AND city=:2', ('US', 'Seattle'))
r2 = cursor.execute('SELECT * FROM locations WHERE country_id=:9 AND city=:4', ('US', 'Seattle'))
r3 = cursor.execute('SELECT * FROM locations WHERE country_id=:m AND city=:0', ('US', 'Seattle'))
단순 도구
class baseUtilsX():
"""baseUtils"""
def __init__(self):
self.connectObj = ""
self.connCnt = 0
self.cursorCnt = 0
def initOracleConnect(self):
oracle_tns = cx_Oracle.makedsn('XXX.XXX.XXX.XXX', 1521,'XX')
if self.connCnt == 0:
self.connectObj = cx_Oracle.connect('oracleUserName', 'password', oracle_tns)
self.connCnt += 1
def getOracleConnect(self):
self.initOracleConnect()
return self.connectObj
def closeOracleConnect(self, connectObj):
connectObj.close()
self.connCnt -= 1
def getOracleCursor(self):
self.initOracleConnect()
self.cursorCnt += 1
return self.connectObj.cursor()
def closeOracleCursor(self, cursorObj):
cursorObj.close()
self.cursorCnt -= 1
if self.cursorCnt == 0:
print "will close conn"
self.closeOracleConnect(self.connectObj)
def selectFromDbTable(self, sql, argsDict):
# tuple list
queryAnsList = []
selectCursor = self.getOracleCursor()
selectCursor.prepare(sql)
queryAns = selectCursor.execute(None, argsDict)
for ansItem in queryAns:
queryAnsList.append(list(ansItem))
self.closeOracleCursor(selectCursor)
return queryAnsList
python 연결 Oracle 난 코드 문제(cxOracle)python 으로 Oracle 을 연결 하 는 것 은 항상 어 지 러 운 코드 입 니 다.마지막 으로 Oacle 클 라 이언 트 의 문자 인 코딩 설정 이 잘못 되 었 습 니 다.
작성 한 python 스 크 립 트 에 다음 과 같은 몇 마디 를 추가 해 야 합 니 다:
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
이렇게 하면 select 에서 나 온 중국어 디 스 플레이 에 문제 가 없다 는 것 을 보증 할 수 있다.정상 적 인 insert 와 update 중국 어 를 사용 하려 면 python 원본 파일 의 문자 집합 암 호 를 Oacle 과 일치 시 켜 야 합 니 다.
# -*- coding: utf-8 -*-
예:
# -*- coding: utf-8 -*-
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' # os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.AL32UTF8'
import cx_Oracle
db = cx_Oracle.connect(username/passwd@host:port/sevicename)
cursor = db.cursor()
#
db.commit()
db.close()
참고:클 라 이언 트 의 NLSLANG 설정 및 인 코딩 변환
① Oracle 클 라 이언 트 가 서버 에 SQL 문 구 를 제출 할 때 Oracle 클 라 이언 트 는 NLSLANG 와 데이터베이스 문자 집합 은 응용 프로그램 에서 전 송 된 문자열 인 코딩 을 변환 처리 합 니 다.하면,만약,만약...LANG 는 데이터베이스 문자 집합 과 같 아서 변환 하지 않 습 니 다.그렇지 않 으 면 데이터베이스 문자 집합 으로 변환 하여 서버 로 전송 해 야 합 니 다.서버 는 문자열 인 코딩 을 받 은 후 일반적인 CHAR 또는 VARCHAR 2 형식 에 대해 직접 저장 합 니 다.NCHAR 또는 NVARCHAR 2 유형 에 대해 서버 측은 이 를 국가 문자 집합 으로 변환 하여 저장 합 니 다.
① Oracle 클 라 이언 트 가 서버 에 SQL 문 구 를 제출 할 때 Oracle 클 라 이언 트 는 NLSLANG 와 데이터베이스 문자 집합 은 응용 프로그램 에서 전 송 된 문자열 인 코딩 을 변환 처리 합 니 다.하면,만약,만약...LANG 는 데이터베이스 문자 집합 과 같 아서 변환 하지 않 습 니 다.그렇지 않 으 면 데이터베이스 문자 집합 으로 변환 하여 서버 로 전송 해 야 합 니 다.서버 는 문자열 인 코딩 을 받 은 후 일반적인 CHAR 또는 VARCHAR 2 형식 에 대해 직접 저장 합 니 다.NCHAR 또는 NVARCHAR 2 유형 에 대해 서버 측은 이 를 국가 문자 집합 으로 변환 하여 저장 합 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
참고 문장
Oracle+Python 에 정통,제1 부분:검색 최 적 실천
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.