SlideShare a Scribd company logo
SQL Server에서
Django를 추구하면
안 되는 걸까?
Dev Django Korea 2018
김태환
아주대학교 의료정보학과에서 Python을 이용해 의료 연구에 쓰이는
Web Application을 만드는 일을 합니다.
지금은 Django를 이용해서 임상시험을 시뮬레이션하기 위한
시스템(AI-CTS) 을 개발 중입니다.
애니메이션, 게임 플레이, 음악 감상 좋아합니다.
Dev Django Korea 2018SQL Server에서 Django 를 추구하면 안 되는 걸까?
자기 소개
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
발표 제목은 이 작품 패러디이지만
시간이 없어 애니메이션 5분 밖에 못 봤네요.
발표 배경
일하는 곳의 서버가 대부분 Windows Server와 SQL Server가 설치 되어 있었음.
게다가 Django에서는 SQL Server는 공식적으로 지원하지 않음.
?
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
다룰 내용
1. SQL Server 와 ODBC 알아보기
2. pyodbc를 이용해서 SQL Server 에 연결 및 쿼리 실행
3. django-pyodbc-azure를 이용해 SQL Server와 Django 연동
4. 사용하면서 생기는 문제 및 Tip, Raw SQL 사용법 공유
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
Microsoft SQL Server 개요
• Microsoft 에서 만들고 관리하는 DBMS로 통칭 mssql
• Windows의 힘인지는 모르겠지만 생각보다 굉장히 많이
사용하고 있다.
• Linux 와 Mac에서도 사용할 수 있음.
• Developer 버전은 크기 제한이 없고 무료.
• Express 버전은 크기 제한이 10GB이지만 프로덕션 사용 가능.
https://db-engines.com/en/ranking/
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
어떻게 설치하지?
• Windows 에서는 홈페이지에서 설치 파일을 다운로드해서 설치.
• Linux 도 홈페이지에서 주요 배포판 별로 설치 명령어 제공
• Mac 에서는 Docker로 구동해야 함.
• Linux 에서 설치할 때 메모리가 충분한지 확인 (메모리가 8GB 이상은 되야함)
(Amazon EC2에 직접 설치할 경우 t2.xlarge 권장)
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
어떻게 연결하지?
• SQL Server에서는 Windows 인증과 SQL Server 인증이라는 두가지 방식을 지원함.
• Windows 인증은 Windows 계정을 이용해서 접속을 시도하는 것.
• Local 에 설치된 SQL Server에 연결할 때 유용하다.
• SQL Server 인증은 다른 DBMS 처럼 아이디와 패스워드를 이용한 접속.
• 보통 ODBC를 이용해서 연결하지만 당연히 JDBC로도 연결이 가능함.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
어떻게 사용하지?
• Windows 에서는 SQL Server Management Studio (SSMS) 라는 프로그램으로
관리 및 쿼리 실행 등 모든 기능이 가능하다.
• mssql-tools 나 mssql-cli 같은 명령줄 도구도 있음.
• VSCODE와 비슷한 Azure Data Studio 라는 오픈 소스 프로그램이 있어서 맥에서도 사용할 수 있다.
• Java 에서는 JDBC로 연결할 수 있고 다른 언어에서는 ODBC로 연결하는 걸 권장함.
• Microsoft 에서는 pyodbc 사용을 권장하고, 오늘 발표에도 이용하게 됨.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
ODBC 란?
• ODBC는 Microsoft 에서 개발한 DB 접근을 위한 표준
규격이다.
• ODBC를 사용하면 드라이버만 있다면 어떤
DBMS에 연결하는 지 신경 쓰지 않고 쉽게 연결이
가능하다.
• pyodbc 는 Python 코드와 ODBC와의 다리 역할을
하게 된다.
https://www.simba.com/resources/odbc/
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
ODBC 사용법?
• Windows 에서는 왼쪽 같은 ODBC 데이터 원본
관리자 로 쉽게 사용 및 관리 가능하다.
• Unix 환경에서는 unix-ODBC 패키지 및 드라이버를
설치하고 터미널 명령어 및 파일로 관리하게 됨.
• ODBC의 장점은 Data Source Name(DSN) 을 미리
연결하고 싶은 데이터베이스를 위해 설정해
놓으면 DSN을 통해 쉽게 DB에 접속할 수 있다.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
연결을 위한 준비
1. 발표자의 환경: Windows 10, SQL Server 2017 Developer
2. SSMS 를 이용해서 설정을 진행함.
3. SQL Server 인증 켜기 및 데이터베이스 만들기
4. 계정 / DSN 만들기
5. pyodbc 설치
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
SSMS
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
SQL Server 인증 켜기
• 개체 탐색기->서버 속성->보안 탭
• 서버 인증 시 저렇게 SQL Server 인증을 동작시키지
않으면 SQL Server 인증이 불가능하다.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
데이터베이스 만들기
• 개체 탐색기->데이터베이스->새 데이터베이스
• 데이터베이스 이름을 정하고 확인
• 옵션에서는 COLLATION(데이터 정렬) 등을 설정할 수
있고 한국어 Windows 면 한국어에 맞춘 기본값이
설정되어 있음.
• SQL Server 2017은 유니코드를 지원하므로
드라이버만 최신 버전을 사용하면 걱정하지 않아도
됨.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
계정 만들기
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
계정 만들기 – 서버 역할
• dbcreator 권한이 없을 경우 Django 단위 테스트
코드를 실행할 때 권한이 없어서 테스트가 실패함.
• 실행해야 할 단위 테스트 코드가 있다면 꼭
체크해주자.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
계정 만들기 – 사용자 매핑
• 데이터베이스와 사용자를 매핑해준다.
• db_datareader, db_datawriter 권한은 당연히 있어야
함.
• db_ddladmin 권한은 스키마를 만들 일이 있을 경우
설정한다.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
DSN
• ODBC에서는 Data Source Name (DSN) 을 만들어서 이용할 수 있다.
• DSN을 이용하면 코드 수준에서 어느 DB에 연결하고 있는지 신경 쓰지 않아도 되고 파일
단위로 재활용도 가능하다.
• Windows 에서는 ODBC 데이터 원본 관리자 를 이용해서 관리할 수 있다.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
ODBC 데이터 원본 관리자
• 사용자 DSN과 시스템 DSN의 차이는 시스템
DSN은 모든 사용자가 공유한다는 차이뿐
• 파일 DSN 에서는 DSN을 저장하거나 저장된
DSN을 불러올 수 있음.
• 드라이버에서는 ODBC 드라이버를 관리
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
드라이버 사용
• 드라이버는 반드시 SQL Server Native Client 나
ODBC Driver * for SQL Server 사용
• SQL Server 같이 낮은 버전의 드라이버들은
인코딩 오류 등 뭔가 문제가 생길 수 있음.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
Windows에서 DSN 만들기
• 데이터 원본 이름과 설명(필요없음) 서버 주소를
꼭 입력해야 함.
• 서버는 Dropdown 메뉴로 보이지만 선택하려는
순간 버그인지 누르는 순간 엄청 오래 걸리므로
반드시 그냥 입력할 것.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
인증 방식 설정하기
• Windows 인증을 사용하면 현재 로그인한
Windows 계정을 이용하게 되므로 간편함.
• SQL Server 인증을 사용할 경우 ID와 암호를
입력한 후 다음 클릭
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
기본 데이터베이스 설정
• 기본 데이터베이스를 설정해주고 가는 것이
좋음.
• SQL Server 나 연결 시에 어떤 데이터베이스를 쓸
지 알 게 된다.
• 나머지는 넘어가도 됨.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
서버 인증서를 신뢰합니다.
• 마침을 클릭하고 데이터 원본 테스트를 클릭했을
때
• 서버 인증서를 신뢰합니다 를 체크하지
않았다면 아래와 같은 에러가 발생 할 수 있음.
• 연결 string에 TrustServerCertificate=True 를
추가해도 됨.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
pyodbc 설치하기
• Python 및 pip 설치하기
• Windows 에서는 ODBC 드라이버가 설치되었나 확인 (보통 설치되어 있음)
• Unix 환경에서는 C++ 코드를 빌드해야 하므로 g++ 가 필요하고
unixodbc 패키지도 설치해야 한다. 참고
• pip install pyodbc
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
pyodbc 연결 및 쿼리 실행하기
import pyodbc
# DSN + Windows 인증
conn = pyodbc.connect('DSN=devdjango;Trusted_Connection=yes;')
# DSN + SQL Server 인증
conn = pyodbc.connect('DSN=devdjango2;UID=thkim;PWD=1234')
# Windows 인증
conn = pyodbc.connect('SERVER=localhost;DATABASE=devdjango;DRIVER={ODBC Driver 13 for SQL
Server};Trusted_Connection=yes;')
# SQL Server 인증
conn = pyodbc.connect('SERVER=localhost;DATABASE=devdjango;DRIVER={ODBC Driver 13 for SQL
Server};UID=thkim;PWD=1234')
with conn.cursor() as cursor:
cursor.execute('SELECT * from names’)
rows = cursor.fetchall()
print(rows)
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
Django 와 SQL Server 연동하기
• Django에서는 django-pyodbc-azure 패키지를 통해서 SQL Server와 연동하게 된다.
• 이 패키지를 사용하면 postgresql 이나 MySQL 같이 Django에서 공식적으로 지원하는
DBMS처럼 SQL Server를 똑같이 쓸 수 있다.
• pip install django-pyodbc-azure
• 패키지 종속성에 pyodbc 가 포함되어 있으므로 Unix 환경에서는 pyodbc 설치를 위한
준비를 마쳐 놓아야 한다.
• 이 패키지는 Django 버전을 따라서 업데이트가 잘 되는 편이므로 Django 버전과 똑같이
맞춰서 설치하는 것이 좋음.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
Django 에서 Windows 인증 (DSN 사용)
# OPTIONS에 Driver 를 설정하지 않은 이유는
# 기본적으로 "ODBC Driver 13 for SQL Server" 를 사용하기 때문입니다.
# 다른 드라이버를 쓰실 분들은 지정해주시면 됩니다.
# https://pypi.org/project/django-pyodbc-azure/
# DSN을 쓰더라도 Django에서 'NAME' 은 필수라 데이터베이스 이름은 넣어주셔야 합니다.
DATABASES = {
'default': {
'NAME': 'devdjango’,
'ENGINE': 'sql_server.pyodbc’,
'OPTIONS': {
'dsn': 'devdjango’
}
}
}
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
Django 에서 SQL Server 인증 (DSN 사용)
# DSN으로 SQL Server 인증 시 DSN에 아이디와 비밀번호가 설정되어 있어서
# 코드 상에 아이디와 비밀번호가 들어갈 필요가 없습니다.
DATABASES = {
'default': {
'NAME': 'devdjango’,
'ENGINE': 'sql_server.pyodbc’,
'OPTIONS': {
'dsn': 'devdjango2’
}
}
}
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
Django 에서 DSN 없이 Windows 인증
# SQL Server와 Django가 같은 서버에 있다면
# 간단히 Windows 인증 쓰셔도 좋을 것 같습니다.
DATABASES = {
'default': {
'NAME': 'devdjango’,
'ENGINE': 'sql_server.pyodbc’,
'HOST': 'localhost’
}
}
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
Django 에서 DSN없이 SQL Server 인증
# SQL Server 인증
# DSN 사용시와 달리 아이디와 비밀번호가 코드에 보입니다.
DATABASES = {
'default': {
'NAME': 'devdjango’,
'ENGINE': 'sql_server.pyodbc’,
'HOST': 'localhost’,
'USER': 'thkim’,
'PASSWORD': '1234’
}
}
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
ORM 및 다른 기능 사용
• 위와 같이 설정을 완료하면 Django ORM 및 manage.py 의 기능을 모두 쓸 수 있다.
• 지금까지 써오면서 모델 정의할 때 오류가 나는 필드는 없었음.
• 혹시 에러가 발생한다면 아래와 같이 로그가 찍히게 됨. MySQL 처럼 오류 코드를 보고
트러블 슈팅을 하면 된다.
django.db.utils.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC 드라이버 관리자] 데이터 원본 이름이 없고
기본 드라이버를 지정하지 않았습니다. (0) (SQLDriverConnect)')
django.db.utils.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]'fro'
근처의 구문이 잘못되었습니다. (102) (SQLExecDirectW)")
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
레거시 DB와의 사투
• 최적화도 덜 되어 있고 많은 데이터가 이미 있는 테이블을 이용하는 경우도 있다.
• 처음에는 그냥 inspectdb 를 사용해서 자동으로 Model 코드를 생성하고 ORM을 사용하려고
했는데 기본키나 외래키조차 걸려있지 않는 테이블이 많았음.
• 그래서 어느정도 Raw SQL을 많이 사용할 수 밖에 없었음.
• ORM이 필요할 경우 테이블 명세를 정확하게 Model 코드를 짜서 테이블을 만들고 데이터를
복제했음.
• 드라이버가 설치되어 있다면 Windows에서 SQL Server 가져오기 및 내보내기 마법사 를
사용할 수 있음.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
로컬에 개발 DB를 둘 수 없을 때
• 병원 정책 상 데이터를 개발 PC에 둘 수가 없어 곤란한 상황이었음.
• 처음에는 한 DB를 공유했는데 마이그레이션 시에 점점 꼬이게 됨
• Django 에서 관리(managed=True)하는 테이블은 절대로 SQL이나 SSMS에서 테이블 디자인을
수정하지 말 것.
• 혹시 부득이하게 수정했을 경우 migrate –fake 를 사용하거나 임시로 오류를 해결하기
위해서 테이블을 고치면 된다.
• 최선은 개발자마다 DB나 스키마를 분리하고 DSN을 따로 만들어서 쓰면 편리하다.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
트랜잭션 로그가 꽉 찼을때
• SQL Server도 트랜잭션 기능이 있고 코드 상의 @transaction 데코레이터도 동작한다.
• 개발할 때 테스트하면서 중간에 쿼리를 끊어버리는 때가 많다 보니 트랜잭션 로그가 꽉차게
됨.
(9002 에러가 발생)
• 로그 파일을 옮겨버리거나 SQL Server에서 로그 파일 최대 크기를 늘려줘야 함.
• https://bit.ly/2NpXujr
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
스키마는 어떻게 다루나요?
• postgresql 처럼 한 데이터베이스 안에서 여러 스키마를 쓸 수 있다.
• 당황하지 말고 트랜잭션 로그를 백업하고 충분한 공간을 확보해준다.
• SQL을 사용할 경우는 [스키마이름].[테이블이름] 식으로 쿼리를 날리면 된다.
• ORM을 쓰려면 원하는 스키마와 대응되는 SQL Server 로그인 계정을 만들고 Django Multi
Database 설정을 활용해서 스키마를 쓰고 싶을 때 해당 설정을 쓰면 된다.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
새 스키마를 위한 계정 만들기
• 새로운 스키마를 위한 계정을 만들어준다.
• 기본스키마 아래에 있는 . 을 클릭
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
계정을 위한 스키마 설정하기
• 새로 뜬 창에서 찾아보기->개체 찾아보기에서
방금 만든 스키마 선택
• 스키마는 CREATE SCHEMA 스키마네임 으로
만들거나 데이터베이스에서 보안->스키마에서
만들 수 있다.
• 이렇게 새 계정을 만들고 이 계정에 대해서 DSN을
만들고 Django에서 연결하면 된다.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
Django 와 새 계정 연동
DATABASES = {
'default': {
'NAME': 'devdjango',
'ENGINE': 'sql_server.pyodbc',
'OPTIONS': {
'dsn': 'devdjango'
}
},
'devdjango': {
'NAME': 'devdjango',
'ENGINE': 'sql_server.pyodbc',
'HOST': 'localhost',
'USER': 'thkim_new',
'PASSWORD': '1234'
}
}
• devdjango 설정이 방금 별도의 스키마로 설정한 계정과
연동되어 있음.
• 이와 같이 설정한 후 migrate –-database=devdjango 를
하면 해당 스키마에 대해서 마이그레이션이
이루어진다.
• ORM을 쓸떄는 object.save(using=devdjango) 나
Table.objects(using=devdjango) 처럼 쓰면 해당 스키마와
연동된다.
• 멀티 DB에 대한 자세한 사용법은 링크를 참고
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
Raw SQL 사용하기
• SQL Server에서 쓰는 SQL은 TSQL이라고 함.
• 다른 DBMS의 SQL과 비슷하지만 독자적인 문법이나 내장함수도 있다.
• Raw Query 를 사용할 때는 from django.db import connection 을 임포트하고 pyodbc에서
했던 것처럼 할 수 있다.
• django-pyodbc-azure 로 연결되서 만들어진 cursor는 순수 pyodbc 에서 만들어진 커서와
기능이 똑같다.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
쿼리 결과의 컬럼 이름을 알고 싶어요
• cursor.description 에는 쿼리 결과의 컬럼명 및 타입이 담겨 있음
• 아래 함수를 이용해서 쉽게 각 column 별로 매칭된 값이 들어있는 리스트를 만들 수 있음.
def dict_fetchall(cursor):
"""
Return all rows from a cursor as a dict
:param cursor:
:return: Result of cursor.fetchall() to Dictionary
"""
columns = [col[0] for col in cursor.description]
return [
dict(zip(columns, row))
for row in cursor.fetchall()
]
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
dict_fetchall 함수 쓰기
with connection.cursor() as cursor:
cursor.execute('SELECT * FROM sample_test')
rows = cursor.fetchall(cursor)
print(rows)
[(1, 'asdasd'), (2, 'asdasddsfdsf'), (3, 'asdasd'), (4, 'asdasdxcv')]
with connection.cursor() as cursor:
cursor.execute('SELECT * FROM sample_test')
rows = dict_fetchall(cursor)
print(rows)
# 위 결과와 달리 컬럼명 별로 매핑되어 있음
[{'id': 1, 'name': 'asdasd'}, {'id': 2, 'name': 'asdasddsfdsf'}, {'id': 3, 'name': 'asdasd'},
{'id': 4, 'name': 'asdasdxcv'}]
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
한 SQL에 Select 문이 두 개 이상이라면?
• cursor.nextset() 이라는 메서드는 다음 SELECT 문이 있다면 커서를 이동시키고 True를
반환한다.
• 그래서 이 함수의 문제점은 처음 한 번은 fetch를 해줘야함.
• 그런데 Python 에는 do-while 문이 없으므로 아래처럼 코드를 작성해야 한다.
with connection.cursor() as cursor:
cursor.execute(sql)
result = dict_fetchall(cursor)
...
while cursor.nextset():
result = dict_fetchall(cursor)
...
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
SQL 문법은 맞는데 오류가 나올떄
• 분명히 SQL 문법오류는 없는데 아래와 같은 에러가 나올 때가 있다.
• SQL을 SSMS 에서 실행하면 * 개 행이 표시됨처럼 row의 숫자를 세 줄 때가 있다.
• Fetch를 하면 pyodbc가 위 메시지를 인식하기 때문에 에러가 나오는 것임.
• SQL 맨 위에 SET NOCOUNT ON 구문을 삽입하면 문제 없이 동작한다.
`No results. Previous SQL was not a query.`
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
SQL Server를 썼을 때 장점
1. Windows 에서 MySQL 이나 다른 RDBMS 들을 활용하려면 어려움이 있을 수 있는데 역시
MS에서 만든 것이라 Windows와 완벽히 호환됨.
2. SSMS에서 쿼리 실행이나 데이터베이스 관리 같은 동작을 모두 수행할 수 있다. pgAdmin
이나 다른 DBMS의 프로그램보다 훨씬 뛰어난 기능을 많이 제공함.
3. django-pyodbc-azure 패키지를 통해서 Django 에서도 ORM 등 Django 의 기능을 대부분
활용할 수 있다.
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
SQL Server를 썼을 때 단점
1. 공식적으로 지원되는 DBMS가 아님
2. SQL Server 는 좋은 DBMS가 맞지만 기능이 방대하고 관리 소요가 꽤 들어가는 편이다. 그리고
postgres처럼 Django 자체에서 제공하는 기능이 있는 것도 아님.
3. Unix 에서 SQL Server를 설치하고 사용할 수 있긴 하지만 DSN을 만들고 관리하는 것은 꽤나 불편한
측면이 많다.
4. 실제로 Django와 SQL Server를 함께 운용하는 경우가 적어서 그런지 정보 검색이 힘든편.
DjangoCon섹션네임
THANK YOU
SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018

More Related Content

PDF
날로 먹는 Django admin 활용
PDF
Django, 저는 이렇게 씁니다.
PPTX
QGIS 고급 및 PyQGIS - 김기웅, 임영현
PDF
NextJS - Online Summit for Frontend Developers September 2020
PPTX
공간정보거점대학 1.geo server_고급과정
PDF
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운
PPTX
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
PPT
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
날로 먹는 Django admin 활용
Django, 저는 이렇게 씁니다.
QGIS 고급 및 PyQGIS - 김기웅, 임영현
NextJS - Online Summit for Frontend Developers September 2020
공간정보거점대학 1.geo server_고급과정
Docker 간단 개념 / Docker 를 이용한 MSA 기반의 Spring Boot 프로젝트 - DSmentoring 정다운
Open Source GIS 기초교육 4일차 - GeoServer 기초 2014년 7월판
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법

What's hot (20)

PDF
GeoServer 2.4.x 한국어 사용자 지침서
PDF
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
PDF
Python과 Git으로 만드는 모바일 게임 패치 시스템
PPTX
Geo server 성능향상을 위한 튜닝 기법 20111028
PDF
쿠키런 1년, 서버개발 분투기
PPTX
Introduce Google Kubernetes
PPTX
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
PDF
Multiplayer Game Sync Techniques through CAP theorem
PDF
멀티스레드 렌더링 (Multithreaded rendering)
PPTX
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
PPTX
GeoServer 기초
PDF
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
PPTX
공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
PDF
왜 네이버클라우드플랫폼인가?(박기은 CTO) - 대구 Cloud Innovation summit
PDF
Universal React apps in Next.js
PPTX
공간정보거점대학 - PyQGIS 및 플러그인 개발
PPTX
오픈소스GIS 개론 과정 - OpenLayers 기초
PDF
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
PPTX
Springboot Microservices
PDF
Qgis 기초 2019
GeoServer 2.4.x 한국어 사용자 지침서
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
Python과 Git으로 만드는 모바일 게임 패치 시스템
Geo server 성능향상을 위한 튜닝 기법 20111028
쿠키런 1년, 서버개발 분투기
Introduce Google Kubernetes
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
Multiplayer Game Sync Techniques through CAP theorem
멀티스레드 렌더링 (Multithreaded rendering)
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
GeoServer 기초
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
공간정보 거점대학 - OpenLayers의 고급 기능 이해 및 실습
왜 네이버클라우드플랫폼인가?(박기은 CTO) - 대구 Cloud Innovation summit
Universal React apps in Next.js
공간정보거점대학 - PyQGIS 및 플러그인 개발
오픈소스GIS 개론 과정 - OpenLayers 기초
[DEVIEW 2021] 1000만 글로벌 유저를 지탱하는 기술과 사람들
Springboot Microservices
Qgis 기초 2019
Ad

Similar to SQL Server에서 Django를 추구하면 안 되는 걸까? (17)

PDF
SQL Server 2019 on RHEL Overview & Case Study
PDF
SQL Azure 실무 도입하기
PDF
Koreans_love_django
PDF
윈도우 서버가 아닌 곳에서 SQL Server를 만나다! - 박주연 :: AWS Database Modernization Day 온라인
PDF
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1
DOC
Sql Server 2005 개요
PDF
Udamp3 django apache-my_sql_python3_ubuntu14.04-v11
PPTX
spark database Service
PDF
RHEL8의 새로운 기술, 그리고 SQL Server 2019와 함께하는 다양한 이점
PDF
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
PPTX
10월 웨비나 - AWS 상에서 Microsoft SQL Server 운영의 모범 사례 살펴보기 (최정욱 솔루션즈 아키텍트)
PPTX
Atlassian Server RDS for MySQL 삽질기
PDF
아마존 웹 서비스 상에서 MS SQL 100% 활용하기::김석원::AWS Summit Seoul 2018
PDF
Python server-101
PDF
클라우드 환경으로 데이터베이스 이전하기 - 강민석, AWS SR. Database SA
PPTX
Python 웹 프로그래밍
PDF
[2017 Windows on AWS] AWS 를 활용한 SQL Server 최적 활용 방안
SQL Server 2019 on RHEL Overview & Case Study
SQL Azure 실무 도입하기
Koreans_love_django
윈도우 서버가 아닌 곳에서 SQL Server를 만나다! - 박주연 :: AWS Database Modernization Day 온라인
토이 프로젝트를 위한 속성 RDB(MySQL) 스터디 1
Sql Server 2005 개요
Udamp3 django apache-my_sql_python3_ubuntu14.04-v11
spark database Service
RHEL8의 새로운 기술, 그리고 SQL Server 2019와 함께하는 다양한 이점
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
10월 웨비나 - AWS 상에서 Microsoft SQL Server 운영의 모범 사례 살펴보기 (최정욱 솔루션즈 아키텍트)
Atlassian Server RDS for MySQL 삽질기
아마존 웹 서비스 상에서 MS SQL 100% 활용하기::김석원::AWS Summit Seoul 2018
Python server-101
클라우드 환경으로 데이터베이스 이전하기 - 강민석, AWS SR. Database SA
Python 웹 프로그래밍
[2017 Windows on AWS] AWS 를 활용한 SQL Server 최적 활용 방안
Ad

SQL Server에서 Django를 추구하면 안 되는 걸까?

  • 1. SQL Server에서 Django를 추구하면 안 되는 걸까? Dev Django Korea 2018 김태환
  • 2. 아주대학교 의료정보학과에서 Python을 이용해 의료 연구에 쓰이는 Web Application을 만드는 일을 합니다. 지금은 Django를 이용해서 임상시험을 시뮬레이션하기 위한 시스템(AI-CTS) 을 개발 중입니다. 애니메이션, 게임 플레이, 음악 감상 좋아합니다. Dev Django Korea 2018SQL Server에서 Django 를 추구하면 안 되는 걸까? 자기 소개
  • 3. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 발표 제목은 이 작품 패러디이지만 시간이 없어 애니메이션 5분 밖에 못 봤네요.
  • 4. 발표 배경 일하는 곳의 서버가 대부분 Windows Server와 SQL Server가 설치 되어 있었음. 게다가 Django에서는 SQL Server는 공식적으로 지원하지 않음. ? SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
  • 5. 다룰 내용 1. SQL Server 와 ODBC 알아보기 2. pyodbc를 이용해서 SQL Server 에 연결 및 쿼리 실행 3. django-pyodbc-azure를 이용해 SQL Server와 Django 연동 4. 사용하면서 생기는 문제 및 Tip, Raw SQL 사용법 공유 SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
  • 6. Microsoft SQL Server 개요 • Microsoft 에서 만들고 관리하는 DBMS로 통칭 mssql • Windows의 힘인지는 모르겠지만 생각보다 굉장히 많이 사용하고 있다. • Linux 와 Mac에서도 사용할 수 있음. • Developer 버전은 크기 제한이 없고 무료. • Express 버전은 크기 제한이 10GB이지만 프로덕션 사용 가능. https://db-engines.com/en/ranking/ SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018
  • 7. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 어떻게 설치하지? • Windows 에서는 홈페이지에서 설치 파일을 다운로드해서 설치. • Linux 도 홈페이지에서 주요 배포판 별로 설치 명령어 제공 • Mac 에서는 Docker로 구동해야 함. • Linux 에서 설치할 때 메모리가 충분한지 확인 (메모리가 8GB 이상은 되야함) (Amazon EC2에 직접 설치할 경우 t2.xlarge 권장)
  • 8. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 어떻게 연결하지? • SQL Server에서는 Windows 인증과 SQL Server 인증이라는 두가지 방식을 지원함. • Windows 인증은 Windows 계정을 이용해서 접속을 시도하는 것. • Local 에 설치된 SQL Server에 연결할 때 유용하다. • SQL Server 인증은 다른 DBMS 처럼 아이디와 패스워드를 이용한 접속. • 보통 ODBC를 이용해서 연결하지만 당연히 JDBC로도 연결이 가능함.
  • 9. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 어떻게 사용하지? • Windows 에서는 SQL Server Management Studio (SSMS) 라는 프로그램으로 관리 및 쿼리 실행 등 모든 기능이 가능하다. • mssql-tools 나 mssql-cli 같은 명령줄 도구도 있음. • VSCODE와 비슷한 Azure Data Studio 라는 오픈 소스 프로그램이 있어서 맥에서도 사용할 수 있다. • Java 에서는 JDBC로 연결할 수 있고 다른 언어에서는 ODBC로 연결하는 걸 권장함. • Microsoft 에서는 pyodbc 사용을 권장하고, 오늘 발표에도 이용하게 됨.
  • 10. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 ODBC 란? • ODBC는 Microsoft 에서 개발한 DB 접근을 위한 표준 규격이다. • ODBC를 사용하면 드라이버만 있다면 어떤 DBMS에 연결하는 지 신경 쓰지 않고 쉽게 연결이 가능하다. • pyodbc 는 Python 코드와 ODBC와의 다리 역할을 하게 된다. https://www.simba.com/resources/odbc/
  • 11. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 ODBC 사용법? • Windows 에서는 왼쪽 같은 ODBC 데이터 원본 관리자 로 쉽게 사용 및 관리 가능하다. • Unix 환경에서는 unix-ODBC 패키지 및 드라이버를 설치하고 터미널 명령어 및 파일로 관리하게 됨. • ODBC의 장점은 Data Source Name(DSN) 을 미리 연결하고 싶은 데이터베이스를 위해 설정해 놓으면 DSN을 통해 쉽게 DB에 접속할 수 있다.
  • 12. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 연결을 위한 준비 1. 발표자의 환경: Windows 10, SQL Server 2017 Developer 2. SSMS 를 이용해서 설정을 진행함. 3. SQL Server 인증 켜기 및 데이터베이스 만들기 4. 계정 / DSN 만들기 5. pyodbc 설치
  • 13. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 SSMS
  • 14. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 SQL Server 인증 켜기 • 개체 탐색기->서버 속성->보안 탭 • 서버 인증 시 저렇게 SQL Server 인증을 동작시키지 않으면 SQL Server 인증이 불가능하다.
  • 15. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 데이터베이스 만들기 • 개체 탐색기->데이터베이스->새 데이터베이스 • 데이터베이스 이름을 정하고 확인 • 옵션에서는 COLLATION(데이터 정렬) 등을 설정할 수 있고 한국어 Windows 면 한국어에 맞춘 기본값이 설정되어 있음. • SQL Server 2017은 유니코드를 지원하므로 드라이버만 최신 버전을 사용하면 걱정하지 않아도 됨.
  • 16. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 계정 만들기
  • 17. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 계정 만들기 – 서버 역할 • dbcreator 권한이 없을 경우 Django 단위 테스트 코드를 실행할 때 권한이 없어서 테스트가 실패함. • 실행해야 할 단위 테스트 코드가 있다면 꼭 체크해주자.
  • 18. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 계정 만들기 – 사용자 매핑 • 데이터베이스와 사용자를 매핑해준다. • db_datareader, db_datawriter 권한은 당연히 있어야 함. • db_ddladmin 권한은 스키마를 만들 일이 있을 경우 설정한다.
  • 19. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 DSN • ODBC에서는 Data Source Name (DSN) 을 만들어서 이용할 수 있다. • DSN을 이용하면 코드 수준에서 어느 DB에 연결하고 있는지 신경 쓰지 않아도 되고 파일 단위로 재활용도 가능하다. • Windows 에서는 ODBC 데이터 원본 관리자 를 이용해서 관리할 수 있다.
  • 20. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 ODBC 데이터 원본 관리자 • 사용자 DSN과 시스템 DSN의 차이는 시스템 DSN은 모든 사용자가 공유한다는 차이뿐 • 파일 DSN 에서는 DSN을 저장하거나 저장된 DSN을 불러올 수 있음. • 드라이버에서는 ODBC 드라이버를 관리
  • 21. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 드라이버 사용 • 드라이버는 반드시 SQL Server Native Client 나 ODBC Driver * for SQL Server 사용 • SQL Server 같이 낮은 버전의 드라이버들은 인코딩 오류 등 뭔가 문제가 생길 수 있음.
  • 22. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 Windows에서 DSN 만들기 • 데이터 원본 이름과 설명(필요없음) 서버 주소를 꼭 입력해야 함. • 서버는 Dropdown 메뉴로 보이지만 선택하려는 순간 버그인지 누르는 순간 엄청 오래 걸리므로 반드시 그냥 입력할 것.
  • 23. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 인증 방식 설정하기 • Windows 인증을 사용하면 현재 로그인한 Windows 계정을 이용하게 되므로 간편함. • SQL Server 인증을 사용할 경우 ID와 암호를 입력한 후 다음 클릭
  • 24. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 기본 데이터베이스 설정 • 기본 데이터베이스를 설정해주고 가는 것이 좋음. • SQL Server 나 연결 시에 어떤 데이터베이스를 쓸 지 알 게 된다. • 나머지는 넘어가도 됨.
  • 25. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 서버 인증서를 신뢰합니다. • 마침을 클릭하고 데이터 원본 테스트를 클릭했을 때 • 서버 인증서를 신뢰합니다 를 체크하지 않았다면 아래와 같은 에러가 발생 할 수 있음. • 연결 string에 TrustServerCertificate=True 를 추가해도 됨.
  • 26. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 pyodbc 설치하기 • Python 및 pip 설치하기 • Windows 에서는 ODBC 드라이버가 설치되었나 확인 (보통 설치되어 있음) • Unix 환경에서는 C++ 코드를 빌드해야 하므로 g++ 가 필요하고 unixodbc 패키지도 설치해야 한다. 참고 • pip install pyodbc
  • 27. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 pyodbc 연결 및 쿼리 실행하기 import pyodbc # DSN + Windows 인증 conn = pyodbc.connect('DSN=devdjango;Trusted_Connection=yes;') # DSN + SQL Server 인증 conn = pyodbc.connect('DSN=devdjango2;UID=thkim;PWD=1234') # Windows 인증 conn = pyodbc.connect('SERVER=localhost;DATABASE=devdjango;DRIVER={ODBC Driver 13 for SQL Server};Trusted_Connection=yes;') # SQL Server 인증 conn = pyodbc.connect('SERVER=localhost;DATABASE=devdjango;DRIVER={ODBC Driver 13 for SQL Server};UID=thkim;PWD=1234') with conn.cursor() as cursor: cursor.execute('SELECT * from names’) rows = cursor.fetchall() print(rows)
  • 28. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 Django 와 SQL Server 연동하기 • Django에서는 django-pyodbc-azure 패키지를 통해서 SQL Server와 연동하게 된다. • 이 패키지를 사용하면 postgresql 이나 MySQL 같이 Django에서 공식적으로 지원하는 DBMS처럼 SQL Server를 똑같이 쓸 수 있다. • pip install django-pyodbc-azure • 패키지 종속성에 pyodbc 가 포함되어 있으므로 Unix 환경에서는 pyodbc 설치를 위한 준비를 마쳐 놓아야 한다. • 이 패키지는 Django 버전을 따라서 업데이트가 잘 되는 편이므로 Django 버전과 똑같이 맞춰서 설치하는 것이 좋음.
  • 29. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 Django 에서 Windows 인증 (DSN 사용) # OPTIONS에 Driver 를 설정하지 않은 이유는 # 기본적으로 "ODBC Driver 13 for SQL Server" 를 사용하기 때문입니다. # 다른 드라이버를 쓰실 분들은 지정해주시면 됩니다. # https://pypi.org/project/django-pyodbc-azure/ # DSN을 쓰더라도 Django에서 'NAME' 은 필수라 데이터베이스 이름은 넣어주셔야 합니다. DATABASES = { 'default': { 'NAME': 'devdjango’, 'ENGINE': 'sql_server.pyodbc’, 'OPTIONS': { 'dsn': 'devdjango’ } } }
  • 30. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 Django 에서 SQL Server 인증 (DSN 사용) # DSN으로 SQL Server 인증 시 DSN에 아이디와 비밀번호가 설정되어 있어서 # 코드 상에 아이디와 비밀번호가 들어갈 필요가 없습니다. DATABASES = { 'default': { 'NAME': 'devdjango’, 'ENGINE': 'sql_server.pyodbc’, 'OPTIONS': { 'dsn': 'devdjango2’ } } }
  • 31. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 Django 에서 DSN 없이 Windows 인증 # SQL Server와 Django가 같은 서버에 있다면 # 간단히 Windows 인증 쓰셔도 좋을 것 같습니다. DATABASES = { 'default': { 'NAME': 'devdjango’, 'ENGINE': 'sql_server.pyodbc’, 'HOST': 'localhost’ } }
  • 32. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 Django 에서 DSN없이 SQL Server 인증 # SQL Server 인증 # DSN 사용시와 달리 아이디와 비밀번호가 코드에 보입니다. DATABASES = { 'default': { 'NAME': 'devdjango’, 'ENGINE': 'sql_server.pyodbc’, 'HOST': 'localhost’, 'USER': 'thkim’, 'PASSWORD': '1234’ } }
  • 33. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 ORM 및 다른 기능 사용 • 위와 같이 설정을 완료하면 Django ORM 및 manage.py 의 기능을 모두 쓸 수 있다. • 지금까지 써오면서 모델 정의할 때 오류가 나는 필드는 없었음. • 혹시 에러가 발생한다면 아래와 같이 로그가 찍히게 됨. MySQL 처럼 오류 코드를 보고 트러블 슈팅을 하면 된다. django.db.utils.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC 드라이버 관리자] 데이터 원본 이름이 없고 기본 드라이버를 지정하지 않았습니다. (0) (SQLDriverConnect)') django.db.utils.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]'fro' 근처의 구문이 잘못되었습니다. (102) (SQLExecDirectW)")
  • 34. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 레거시 DB와의 사투 • 최적화도 덜 되어 있고 많은 데이터가 이미 있는 테이블을 이용하는 경우도 있다. • 처음에는 그냥 inspectdb 를 사용해서 자동으로 Model 코드를 생성하고 ORM을 사용하려고 했는데 기본키나 외래키조차 걸려있지 않는 테이블이 많았음. • 그래서 어느정도 Raw SQL을 많이 사용할 수 밖에 없었음. • ORM이 필요할 경우 테이블 명세를 정확하게 Model 코드를 짜서 테이블을 만들고 데이터를 복제했음. • 드라이버가 설치되어 있다면 Windows에서 SQL Server 가져오기 및 내보내기 마법사 를 사용할 수 있음.
  • 35. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 로컬에 개발 DB를 둘 수 없을 때 • 병원 정책 상 데이터를 개발 PC에 둘 수가 없어 곤란한 상황이었음. • 처음에는 한 DB를 공유했는데 마이그레이션 시에 점점 꼬이게 됨 • Django 에서 관리(managed=True)하는 테이블은 절대로 SQL이나 SSMS에서 테이블 디자인을 수정하지 말 것. • 혹시 부득이하게 수정했을 경우 migrate –fake 를 사용하거나 임시로 오류를 해결하기 위해서 테이블을 고치면 된다. • 최선은 개발자마다 DB나 스키마를 분리하고 DSN을 따로 만들어서 쓰면 편리하다.
  • 36. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 트랜잭션 로그가 꽉 찼을때 • SQL Server도 트랜잭션 기능이 있고 코드 상의 @transaction 데코레이터도 동작한다. • 개발할 때 테스트하면서 중간에 쿼리를 끊어버리는 때가 많다 보니 트랜잭션 로그가 꽉차게 됨. (9002 에러가 발생) • 로그 파일을 옮겨버리거나 SQL Server에서 로그 파일 최대 크기를 늘려줘야 함. • https://bit.ly/2NpXujr
  • 37. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 스키마는 어떻게 다루나요? • postgresql 처럼 한 데이터베이스 안에서 여러 스키마를 쓸 수 있다. • 당황하지 말고 트랜잭션 로그를 백업하고 충분한 공간을 확보해준다. • SQL을 사용할 경우는 [스키마이름].[테이블이름] 식으로 쿼리를 날리면 된다. • ORM을 쓰려면 원하는 스키마와 대응되는 SQL Server 로그인 계정을 만들고 Django Multi Database 설정을 활용해서 스키마를 쓰고 싶을 때 해당 설정을 쓰면 된다.
  • 38. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 새 스키마를 위한 계정 만들기 • 새로운 스키마를 위한 계정을 만들어준다. • 기본스키마 아래에 있는 . 을 클릭
  • 39. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 계정을 위한 스키마 설정하기 • 새로 뜬 창에서 찾아보기->개체 찾아보기에서 방금 만든 스키마 선택 • 스키마는 CREATE SCHEMA 스키마네임 으로 만들거나 데이터베이스에서 보안->스키마에서 만들 수 있다. • 이렇게 새 계정을 만들고 이 계정에 대해서 DSN을 만들고 Django에서 연결하면 된다.
  • 40. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 Django 와 새 계정 연동 DATABASES = { 'default': { 'NAME': 'devdjango', 'ENGINE': 'sql_server.pyodbc', 'OPTIONS': { 'dsn': 'devdjango' } }, 'devdjango': { 'NAME': 'devdjango', 'ENGINE': 'sql_server.pyodbc', 'HOST': 'localhost', 'USER': 'thkim_new', 'PASSWORD': '1234' } } • devdjango 설정이 방금 별도의 스키마로 설정한 계정과 연동되어 있음. • 이와 같이 설정한 후 migrate –-database=devdjango 를 하면 해당 스키마에 대해서 마이그레이션이 이루어진다. • ORM을 쓸떄는 object.save(using=devdjango) 나 Table.objects(using=devdjango) 처럼 쓰면 해당 스키마와 연동된다. • 멀티 DB에 대한 자세한 사용법은 링크를 참고
  • 41. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 Raw SQL 사용하기 • SQL Server에서 쓰는 SQL은 TSQL이라고 함. • 다른 DBMS의 SQL과 비슷하지만 독자적인 문법이나 내장함수도 있다. • Raw Query 를 사용할 때는 from django.db import connection 을 임포트하고 pyodbc에서 했던 것처럼 할 수 있다. • django-pyodbc-azure 로 연결되서 만들어진 cursor는 순수 pyodbc 에서 만들어진 커서와 기능이 똑같다.
  • 42. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 쿼리 결과의 컬럼 이름을 알고 싶어요 • cursor.description 에는 쿼리 결과의 컬럼명 및 타입이 담겨 있음 • 아래 함수를 이용해서 쉽게 각 column 별로 매칭된 값이 들어있는 리스트를 만들 수 있음. def dict_fetchall(cursor): """ Return all rows from a cursor as a dict :param cursor: :return: Result of cursor.fetchall() to Dictionary """ columns = [col[0] for col in cursor.description] return [ dict(zip(columns, row)) for row in cursor.fetchall() ]
  • 43. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 dict_fetchall 함수 쓰기 with connection.cursor() as cursor: cursor.execute('SELECT * FROM sample_test') rows = cursor.fetchall(cursor) print(rows) [(1, 'asdasd'), (2, 'asdasddsfdsf'), (3, 'asdasd'), (4, 'asdasdxcv')] with connection.cursor() as cursor: cursor.execute('SELECT * FROM sample_test') rows = dict_fetchall(cursor) print(rows) # 위 결과와 달리 컬럼명 별로 매핑되어 있음 [{'id': 1, 'name': 'asdasd'}, {'id': 2, 'name': 'asdasddsfdsf'}, {'id': 3, 'name': 'asdasd'}, {'id': 4, 'name': 'asdasdxcv'}]
  • 44. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 한 SQL에 Select 문이 두 개 이상이라면? • cursor.nextset() 이라는 메서드는 다음 SELECT 문이 있다면 커서를 이동시키고 True를 반환한다. • 그래서 이 함수의 문제점은 처음 한 번은 fetch를 해줘야함. • 그런데 Python 에는 do-while 문이 없으므로 아래처럼 코드를 작성해야 한다. with connection.cursor() as cursor: cursor.execute(sql) result = dict_fetchall(cursor) ... while cursor.nextset(): result = dict_fetchall(cursor) ...
  • 45. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 SQL 문법은 맞는데 오류가 나올떄 • 분명히 SQL 문법오류는 없는데 아래와 같은 에러가 나올 때가 있다. • SQL을 SSMS 에서 실행하면 * 개 행이 표시됨처럼 row의 숫자를 세 줄 때가 있다. • Fetch를 하면 pyodbc가 위 메시지를 인식하기 때문에 에러가 나오는 것임. • SQL 맨 위에 SET NOCOUNT ON 구문을 삽입하면 문제 없이 동작한다. `No results. Previous SQL was not a query.`
  • 46. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 SQL Server를 썼을 때 장점 1. Windows 에서 MySQL 이나 다른 RDBMS 들을 활용하려면 어려움이 있을 수 있는데 역시 MS에서 만든 것이라 Windows와 완벽히 호환됨. 2. SSMS에서 쿼리 실행이나 데이터베이스 관리 같은 동작을 모두 수행할 수 있다. pgAdmin 이나 다른 DBMS의 프로그램보다 훨씬 뛰어난 기능을 많이 제공함. 3. django-pyodbc-azure 패키지를 통해서 Django 에서도 ORM 등 Django 의 기능을 대부분 활용할 수 있다.
  • 47. SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018 SQL Server를 썼을 때 단점 1. 공식적으로 지원되는 DBMS가 아님 2. SQL Server 는 좋은 DBMS가 맞지만 기능이 방대하고 관리 소요가 꽤 들어가는 편이다. 그리고 postgres처럼 Django 자체에서 제공하는 기능이 있는 것도 아님. 3. Unix 에서 SQL Server를 설치하고 사용할 수 있긴 하지만 DSN을 만들고 관리하는 것은 꽤나 불편한 측면이 많다. 4. 실제로 Django와 SQL Server를 함께 운용하는 경우가 적어서 그런지 정보 검색이 힘든편.
  • 48. DjangoCon섹션네임 THANK YOU SQL Server에서 Django 를 추구하면 안 되는 걸까? Dev Django Korea 2018