반응형

보통 네트워크 통신을 위해 requests를 많이들 쓴다.

import requests

 

당연히도 통신을 한다면 오류가 뜨는 Exception을 잡아야한다.

https://requests.readthedocs.io/en/latest/user/quickstart/#errors-and-exceptions

 

이 링크를 한번 자세히 읽어보고 사용하길 바란다.

 

import requests

url = 'Your.url.com'
try:
    req = requests.get(url)

except requests.exceptions.Timeout as errd:
    print("Timeout Error : ", errd)
    
except requests.exceptions.ConnectionError as errc:
    print("Error Connecting : ", errc)
    
except requests.exceptions.HTTPError as errb:
    print("Http Error : ", errb)

# Any Error except upper exception
except requests.exceptions.RequestException as erra:
    print("AnyException : ", erra)
반응형
반응형

리스트에서 같은 값 찾기

A = [1, 2, 3, 4, 5]
B = [9, 8, 7, 6, 5]

C = set(a) & set(b)
D = [i for i, j in zip(A, B) if i == j]

# C ==> {5}  (object)
# D ==> [5]  (list)

 

리스트에서 다른 값 찾기

A = [1, 2, 3, 4, 5]
B = [1, 3, 5, 7, 9]

C = list(set(A) - set(B))
D = list(set(B) - set(A))

# C ==> [2, 4]
# D ==> [7, 9]

 

반응형
반응형

PyMsSQL 을 사용할 경우

import pymssql
import getpass

tempServer = input("Enter host: ")
tempUser = input("Enter user: ")
tempPwd = getpass.getpass("Enter password: ")

try:
    phjTempConnection = pymssql.connect(server = tempServer,
                                        user = tempUser,
                                        password = tempPwd,
                                        port = '1433')
except pymssql.InterfaceError:
    print("A MSSQLDriverException has been caught.")

except pymssql.DatabaseError:
    print("A MSSQLDatabaseException has been caught.")

 

_mssql 을 사용할 경우

import _mssql
import getpass

tempServer = input("Enter host: ")
tempUser = input("Enter user: ")
tempPwd = getpass.getpass("Enter password: ")

try:
    phjTempConnection = _mssql.connect(server = tempServer,
                                       user = tempUser,
                                       password = tempPwd,
                                       port = '1433')

except _mssql.MssqlDriverException:
    print("A MSSQLDriverException has been caught.")

except _mssql.MssqlDatabaseException as e:
    print("A MSSQLDatabaseException has been caught.")
    print('Number = ',e.number)
    print('Severity = ',e.severity)
    print('State = ',e.state)
    print('Message = ',e.message)

 

 

반응형
반응형

1. Microsoft SQL Server DB 모듈

Python에서 Microsoft SQL Server 데이타베이스를 사용하기 위해 우선 Python DB API 표준을 따르는 MSSQL DB 모듈을 다운받아 설치한다. MSSQL DB 를 지원하는 Python 모듈은 여러 가지가 있는데, 여기서는 pymssql 이라는 모듈을 사용해 본다. pymssql은 Python DB API (PEP-249) 스펙을 따르는 FreeTDS 위에 구현된 파이썬 모듈이다.

MSSQL DB 모듈 중 하나인 pymssql 모듈을 다음과 같이 설치한다.

$ pip install pymssql

※ pymmsql 설치오류시

https://docs.microsoft.com/ko-kr/sql/connect/python/pymssql/step-1-configure-development-environment-for-pymssql-python-development?view=sql-server-ver15

의 절차를 따라서 설치한다.

 

2. MSSQL 사용 절차

Python에서 MSSQL에 있는 데이타를 사용하는 일반적인 절차는 다음과 같다.

  1. pymssql 모듈을 import 한다
  2. pymssql.connect() 메소드를 사용하여 MSSQL에 Connect 한다. 호스트명, 로그인, 암호, 접속할 DB 등을 파라미터로 지정할 수 있다.
  3. DB 접속이 성공하면, Connection 객체로부터 cursor() 메서드를 호출하여 Cursor 객체를 가져온다. DB 커서는 Fetch 동작을 관리하는데 사용된다.
  4. Cursor 객체의 execute() 메서드를 사용하여 SQL 문장을 DB 서버에 보낸다.
  5. SQL 쿼리의 경우 Cursor 객체의 fetchall(), fetchone(), fetchmany() 등의 메서드를 사용하여 데이타를 서버로부터 가져온 후, Fetch 된 데이타를 사용한다.
  6. 삽입, 갱신, 삭제 등의 DML(Data Manipulation Language) 문장을 실행하는 경우, INSERT/UPDATE/DELETE 후 Connection 객체의 commit() 메서드를 사용하여 데이타를 확정 갱신한다.
  7. Connection 객체의 close() 메서드를 사용하여 DB 연결을 닫는다.

아래 예제들의 기본 샘플 데이타로 아래와 같은 Customer 테이블이 있다고 가정하자.

3. MSSQL 쿼리

SQL 쿼리는 SELECT 문을 작성하여 execute() 메서드를 실행하면 된다. 아래 예제는 위에서 설명한 일반적인 MSSQL 사용 절차를 따른 것으로, 간단한 SELECT 문을 실행한 후, 전체 ROW 데이타를 출력하는 예이다.

 

# pymssql 패키지 import
import pymssql
 
# MSSQL 접속
conn = pymssql.connect(server="Your.Server.IP:Port", user="I.D", password="PassWord", database="DB Name", charset='utf8')
 
# Connection 으로부터 Cursor 생성
cursor = conn.cursor()
 
# SQL문 실행
cursor.execute('SELECT * FROM Customer;')
 
# 데이타 하나씩 Fetch하여 출력
row = cursor.fetchone()
while row:
    print(row[0], row[1])
    row = cursor.fetchone()
   
# 연결 끊기
conn.close() 

(1) 커서의 fetchone() 메서드는 데이타를 클라이언트로 하나씩 가져올 때 사용된다. fetchone()을 여러 번 호출하면, 호출 때 마다 한 Row 씩 데이타를 가져오게 된다. 그리고, 모든 데이타를 한꺼번에 클라이언트로 가져올 때는 fetchall()을, n개 만큼의 데이타만 가져올 때는 fetchmany(n)를 사용한다.

(2) DB 사용이 끝난 경우 close() 메서드를 호출하여 연결을 끊어 준다.

반응형

+ Recent posts