파이썬에서 오라클을 다루기 위해서 주로 cx_Oracle 라이브러리를 많이 사용합니다.

그리고 쿼리를 전달할 때 where 절에 한글이 들어가야 하는 경우도 있는데,

그냥 전달할 경우 한글을 인식하지 못해 제대로 된 결과 값이 안 나오는 경우가 있습니다.


# -*- coding: utf-8 -*-

import cx_Oracle

db = cx_Oracle.connect(DB접속 정보)

cursor = db.cursor()

SELECT * FROM table_name WHERE title like '%한글제목%'


위와 같이 쿼리를 전달할 경우 제대로 된 결과값이 안 나옵니다.

아래 처럼 utf-8로 decode 된 값으로 전달을 해줘야 제대로 출력되는 것을 볼 수 있습니다.


# -*- coding: utf-8 -*-

import cx_Oracle

db = cx_Oracle.connect(DB접속 정보)

cursor = db.cursor()

cusor.execute("SELECT * FROM table_name WHERE title like '%한글제목%'".decode('utf8'))

python에서 리스트는 여러모로 많이 쓰입니다.

보통 리스트에 저장된 모든 값들을 출력을 많이 하는데 중복된 값이 있다면 필요가 없겠죠.


이때 set함수를 사용합니다.

set함수는 집합과 관련된 함수로 중복제거에 사용 시 아래와 같이 사용하면 됩니다.


list1 = ['1', '3', '5', '2', '4', '1', '5']


print list(set(list1))


<결과>


하지만 set함수는 위에서 보시는 것처럼 '순서와 상관없이' 중복만 제거 합니다.


만약 순서를 유지하면서 출력을 하고 싶다면 아래 코드를 이용하시면 됩니다.


from collections import OrderedDict


list2 = ['1', '2', '3', '4', '5', '3', '5']

print list(OrderedDict.fromkeys(list2))


OrderedDict 라이브러리를 사용하여 원본 리스트가 가진 값을 순서대로 정렬 및 중복 제거를 수행합니다.


<결과>

아마 이런 식의 출력을 원하시는 분들이 더 많을 것 같습니다.


다른 언어로는 여러 줄의 코드가 필요하겠지만 파이썬으로는 한 줄이면 가능하다는 점이 많은 분들이 파이썬을 사용하는 이유가 아닐까 싶습니다.


=)

평소에 에버노트를 잘 쓰던 중 아래와 같은 이메일을 받았습니다.


이제 2개를 초과하는 장치에 대해서는 베이직 계정 이상의 서비스를 구입해야한다는 내용인데요.

평소 3개 이상의 장치에서 에버노트를 쓰는데다 월 60mb 제한과 노트 용량제한도 신경쓰이던 부분이었는데 이번 기회에 그냥 구입했습니다.

많이 싸게.. 반 값으로..


예전에는 결제할 국가를 선택할 수 있어서 베트남으로 지정하여 약 2만 3000원 정도로 1년 이용권을 구입할 수 있었습니다.

하지만 지금은 결제 페이지를 접속하면 자동으로 원 화로 결제가 진행됩니다.

이걸 우회하는 방법으로 vpn으로 해외 국가로 접속해서 결제 페이지를 들어가면 선택한 국가에 해당하는 금액으로 결제가 가능합니다.


저는 크롬에서 확장프로그램으로 vpn을 설치하는 방식을 사용했습니다.

크롬 > 웹 스토어 > vpn > 확장 프로그램 > TunnelBear VPN 설치(링크)

크롬 웹스토어에 많은 vpn 프로그램이 있는데 4~5개 설치해보다가 TunnelBear가 제일 괜찮아서 이걸로 진행했습니다. (구글 로그인을 해야합니다.)


우선, 국가별 결제 금액은 아래와 같습니다.

원래 제일 저렴하다고 알고 있던 베트남은 예전에 440,000동에서 550,000으로 올라 현재 28,545원입니다.


그리고 TunnelBear VPN에서 선택가능한 나라들 중 브라질과 멕시코입니다.


저도 처음에는 베트남으로 결제하려고 VPN을 설치했는데 베트남 서버가 없어 멕시코로 선택해놓고 보다가 알게됬습니다.

직접 VPN IP입력해서 베트남으로 들어가니까 가격이 올라 멕시코 보다 비싸졌구요.


VPN을 연결한 상태에서 프리미엄 결제를 진행하면 아래와 같이 399페소로 결제가 가능합니다.

단, 중간의 신용카드 발행 국가를 대한민국으로 고쳐주셔야합니다.

나머지 정보들은 써있는대로 맞게 입력하시면 결제가 완료됩니다.

VPN을 이용해서 접속하고 있는 중이라 시간은 30초 이상 걸리는 듯 합니다.


그럼 55,000원이 아닌 해외 결제 수수료 포함해도 25,000원 정도의 돈으로 에버노트 프리미엄 서비스를 이용하실 수 있습니다.


에버노트 프리미엄 1개월 받고 신규 가입 하기


  1. Favicon of https://slic.tistory.com Total Fix! 2016.06.30 06:22 신고

    OneNote가 무료로 제공되는데 에버노트를 돈주고 써야 할 이유가 있을 까요?

    • Favicon of https://pwnbit.kr pwnbit 2016.06.30 21:56 신고

      제가 원노트를 안 써봐서 비교는 못 하겠네요 ㅎㅎ
      아직 에버노트를 안 쓰시던 분들은 요즘 무료인 앱들이나 서비스들 많으니 그 중 골라쓰시면 될테고, 하다못해 블로그 하나 만들어서 거기 올려도 똑같구요. 오히려 블로그가 기능이 더 많을 수도 있겠네요.
      전 에버노트 몇년째 써와서 익숙하고 편한 인터페이스나 태그관리, 프레젠테이션 기능 등을 쓰고, 오랫동안 쓰면서 제가 편하게 설정한 것들이 있어서 옮기기도 번거롭구요 ㅎㅎ


예전에는 파이썬에서 웹을 다룰 때 urllib, urllib2, beautifulsoup를 많이 사용했습니다.

알려진 웹 관련 라이브러리래봐야 저 정도가 전부였기도 하고...


요즘엔 requests라는 라이브러리를 많이 사용하고 실제로 써보니 확실히 많이 편하구요.

처음 requests를 사용한건 IP 조회 코드가 필요해서 쓰게 됬는데, 그 이후로 웹 관련 코드 작성할 때는 requests만 쓰고 있습니다.


다만 이 라이브러리에서의 문제는 간혹 한글이 깨져서 출력되는 경우가 있다는 것...

웹 페이지 인코딩 설정에 따라 다른 것 같은데 req.text로 결과값을 가져올 경우 한글이 깨지는 경우가 발생합니다.


문제 해결은 간단하게 해결했는데.. req.content로 결과값을 출력시켜주면 됩니다.

원인은 req.text는 값을 'unicode'형으로 가져옵니다.

반면, req.content는 'str'형으로 값을 가져오구요.



unicode로 값을 가져올 경우 코딩하다보면 아주 짜증나는 문자 체계덕에 좀 꼬이는 경우가 발생하는 것 같습니다.

unicode 처리할 때 종종 쓰는 codecs 라이브러리나 다른 .encode(), unicode() 등을 쓰지 않고도 requests 라이브러리 자체적으로 해결되니 진짜 잘 만들어진 라이브러리란 생각도 드네요.



참고 : http://stackoverflow.com/questions/11435331/python-requests-and-unicode

python send mail - 메일 전송 프로그램


이 프로그램이 필요하다고 생각된건 인터넷을 기가랜으로 바꾸기 전에는 집에 공인 IP 한 개만 들어와서 공유기가 꺼지지 않는 이상은 상관없었는데, 기가랜 모뎀이 생기면서 연결되는 PC, IPTV, VoIP, 무선공유기, Rasberry PI까지.. 모든 장치가 공인 IP를 받아온다.


문제는 PC나 Rasberry PI가 부팅 시마다 IP가 바뀌니 원격에서 붙기가 어려웠고, IP를 메일로 보내주는 프로그램을 생각했다.

다행히 윈도우 기반인 PC와 Linux 기반인 Rasberry PI 둘 다 Python이 먹히니 귀찮음은 덜었다.


우선, 메일을 보내기 위해서는 SMTP(Simple Mail Transfer Protocol) Server가 필요한데, 인터넷에서 간단한 SMTP 서버를 설치해도 괜찮고, 구글이나 네이버 등의 다른 SMTP를 써도 괜찮다. 다만, 이 프로그램 하나 돌리자고 SMTP Server까지 운영하면서 보안상 문제까지 떠안기는 싫어서보안 잘 하는 구글이나 네이버의 서버를 쓰기로 했다.


타 회사의 서버를 사용하기 위해서는 우선 본인 계정에서 smtp 사용 설정을 해줘야한다.

이후 작성할 python코드에 아래 정보를 입력해주면 된다.

smtp.naver.com / smtp.gmail.com

smtp 포트 : 465

ID/PW : 본인 네이버 계정


처음에는 간단히 smtplib와 email라이브러리를 이용해서 최소의 기능만 하는 프로그램을 작성했지만, 부팅 시간도 체크하기 위해 시간 관련 라이브러리를 추가해서 마무리했고 더 필요한 기능도 없어보인다.


메일 전송 결과 아래와 같이 정상적으로 전송되는 것을 확인 가능하다.



약간의 설명을 덧 붙이자면, sender에는 보내는 사람의 계정(smtp서버와 동일 계정), receiver에는 받을 계정이 들어가야하고

ID와 PW에는 보내는 사람 계정의 정보가 들어가야한다.


================

부팅 시 해당 프로그램이 실행되어야 하니 윈도우의 작업 스케줄러에 추가해주는 작업이 필요하다.

실행(Win+R) > taskschd.msc 혹은 제어판에서 작업 스케줄러를 실행한다.

좌측 메뉴 중 작업 스케줄러 라이브러리를 클릭 후 우측에서 작업 만들기로 새 작업을 만들어주면 된다.

트리거 탭에서 시작할 때 사용하는 옵션과, 동작 탭에서 실행될 프로그램만 지정해주면 간단히 끝난다.





+ Recent posts