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
  • 증가,삭제,변경 작업 은 현재 연결 을 통 해 commt()
  • 를 진행 해 야 합 니 다.
  • 커서 커서 를 사용 하여 N 회 조 회 를 진행 할 경우 이전 N-1 회 조회 결 과 를 다시 사용 하면 이상 이 있 을 수 있 음 을 주의 하 십시오.여러 개의 조 회 를 진행 하려 면 개인 적 으로 cursor 를 사용 한 후에 결 과 를 보류 하고 cursor 를 닫 는 것 을 권장 합 니 다.이 동작 을 반복 하 는 것 을 여러 번 조회 하 는 것 을 권장 합 니 다.
  • prepare 를 사용 하지 않 으 면 execute 를 직접 사용 할 수 있 습 니 다.아래 의 조회 등가:
  • 
    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'))
  • sql 문장의 문법 은 데이터베이스 와 관련 이 있 습 니 다.바 인 딩 변 수 를 사용 하지 않 으 려 면 sql 문자열(>3869°)
  • 을 연결 할 수 있 습 니 다.
    단순 도구
    
    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 부분:검색 최 적 실천

    좋은 웹페이지 즐겨찾기