pymssql nextset() 빈값 이슈

최근에 구현한 부분에서 이상한 경험을 했는데 같은 db 프로시저를 호출하는 코드를 쓰고 테스트를 했는데 어떤 조건으로는 데이터가 순서에 맞게 잘 나오고 안나오고 하는 경우였다. 데이터는 mssql 저장 프로시저에서 2개의 결과셋을 반환하는데 첫번째에서는 보여줄 데이터의 금액, 건수 합산 데이터를 보여주고, 두번째에서는 실제 보여줄 데이터가 나오는 것이었다. 그래서 generator 를 이용해서 g.next(), g.next() 이렇게 2번 호출해서 해당 데이터를 받아오고 각각을 다른 변수에 담아서 리턴하고 있었다. 리턴된 데이터는 웹상에서 2개의 datatables 에 표시하는 식으로 구성되어 있었다. while True: result = [row for row in self.cursor] try: yield result except GeneratorExit: break ... result_sum = g.nextset() result_detail = g.nextset() 그런데 어떤 조건하에서는 이상하게 두번째 데이터가 첫번째 datatables 에 표시되는 버그가 있었다. 아무리 생각해도 이해가 되지 않아서, mssql 을 통해서 조회해보니 첫번째의 합산 결과셋이 빈칸으로 오는 것이었다. 그러면 상식적으로 첫번째 결과셋을 받는 변수에는 [] 로 나오고 두번째 결과셋을 받는 변수에는 실제 데이터가 나와야 한다. 그런데 첫번째 결과셋 변수에 두번째 결과셋 데이터가 들어가 있었다. 왜 이런 문제가 생길까? 문제의 원인은 pymssql 에서 nextset() 을 받아올때 빈

pyodbc-MSSQL 사용시, 한글 문제

이전에 pyodbc 를 사용하는 부분에 대해서 설명했었는데 이번에는 한글 insert 시 깨지는 문제가 생긴다. 이 문제의 해결을 위해서 사실은 사용하는 파이썬쪽, 그리고 돌아가는 리눅스의 LANG, LOCALE 설정, 그리고 PYODBC 와 FreeTDS, UNIXODBC 등의 설정을 모두 UTF8로 설정했음에도 불구하고 발생하는 문제였다. 한 2일 정도 고생하다가, 모든 내용을 StackOverflower 에 올렸다.  http://stackoverflow.com/questions/26503531/why-insert-empty-value-using-pyodbc-in-linux-environment 다른 개발자들이 해 본결과로는 이상하게 문자열 형식으로 insert 쿼리를 입력하는 경우에는 문제가 생긴다는 것이다.  아무튼 이 문제는 파라미터 전달 방식으로 데이터를 보내면 해결되는 문제였다. 사실 여전히 왜 이렇게 동작하는지는 의문이다. 링크상에서도 된다고만 하지 왜 그런지는 애길하지 않는다. pyodbc로 mssql을 연동 하면서 느낀점은 정말 꼭 mssql을 써야하는 상황이 아니라면 굳이 연동을 할 필요가 있을까 하는 생각도 들고, 꼭 mssql을 사용하는 상황이라면 차라리 asp

리눅스에서 pyodbc 이용해서 mssql과 연동하기

일반적으로 python-mssql 라이브러리들은 윈도우를 기반으로 동작한다. 이때 pyodbc나 pymssql 들은 내부적으로 윈도우에 설치된 SqlClient 등의 라이브러리에 의존하게 된다.  문제 : 리눅스 환경에서는 SqlClient 와 같은 라이브러리가 없는데 어디에 의존해야 할까? pyodbc 를 기준으로 설명하자면, 리눅스 환경. CentOS, Ubuntu, MAC OSX 등의 환경에서는 unixODBC 와 FreeTDS 라는 라이브러리가 필요하다. unixODBC  – non winodws platform 상에서 표준 ODBC를 사용할수 있도록 해주는 라이브러리.  – 설치법  centos :  yum install unixODBC unixODBC-devel ubuntu :  apt-get install unixodbc-dev unixodbc-bin unixodbc FreeTDS  – 유닉스, 리눅스를 위한 라이브러리 집합으로 MS SQL  Server, Sybase 데이터베이스와의 통신을 위한 라이브러리  – TDS(Tabular Data Stream)프로토콜 에 대한 오픈소스 구현체이다.  – 설치법 :  ftp://ftp.freetds.org/pub/freetds/stab

[펌] MS-SQL : 저장 프로시저 만들기

출처 : http://cafe.naver.com/hackertime/397 **저장 프로시저 만들기** 사용법) CREATE PROC[EDURE] 저장 프로시저 이름 [저장 프로시저의 매개 변수 목록] AS  저장 프로시저 내에서 실행될 쿼리들   **1. 매개변수 없는 프로시져** 예) CREATE PROC up_member AS Begin  SELECT *  FROM test_member End 실행명령 :  EXEC 실행할 저장 프로시저 이름 (EXEC up_member)   **2. 매개변수 있는 프로시져** 예) CREATE PROC up_member @id varchar