SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
회사에서 써보는 SQLAlchemy
        김재석
저는 이런 사람입니다.

‣   (주)스포카 공동창업자 / 기술 총괄

‣   도도포인트 서비스 개발중

    ‣   쉽고 빠른 적립, 스마트한 고객관리

    ‣   300여개 매장 이용 중

    ‣   http://dodopoint.com/
SQLAlchemy 소개
이게 뭔가요.




‣   The Python SQL Toolkit and
    Object Relational Mapper

‣   http://www.sqlalchemy.org/
뭐가 좋은가요.


‣   Function-based query construction

‣   Framework independent

‣   High Performing Architecture

‣   Non-Opinionated
이렇게들 쓰고 있습니다.
현업에서의 장점?
SQLAlchemy in Spoqa


‣   첫 서비스 개발(2011.02)부터 이용

‣   PostgreSQL에 물려서 쓰고 있음

‣   처음에 MySQL이었다가 변경

‣   개발팀 6명 중 4명은 회사에서 처음 접함
실전에서 부각되는
SQLAlchemy의 장점들

‣   복잡한 쿼리도 만들 수 있다!

‣   DBA의 엄격한 설계 기준 맞추기

‣   웹서비스 아닌 곳에서 ORM 쓰기

‣   쌩판 처음 보는 테이블에 ORM 씌우기
Django ORM
class Manufacturer(models.Model):
    name = models.CharField(max_length=30)

class Car(models.Model):
    manufacturer = models.ForeignKey(Manufacturer,
                                     related_name='cars')
    name = models.CharField(max_length=30)




SQLAlchemy
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, backref

class Manufacturer(Base):
    __tablename__ = 'manufacturers'
    id = Column(Integer, primary_key=True)
    name = Column(String(30))

class Car(models.Model):
    __tablename__ = 'cars'
    id = Column(Integer, primary_key=True)
    manufacturer_id = Column(Integer, ForeignKey('manufacturers.id'))
    name = Column(String(30))

      manufacturer = relationship('Manufacturer', backref=
          backref('cars', lazy='dynamic'))

http://lucumr.pocoo.org/2011/7/19/sqlachemy-and-you/
어려워 보이는데요?

‣   다른 ORM보다는 써야 할 것이 더 많은 편

‣   하지만 회사처럼 장기적으로 제품을 개발해야 할 때
    는 이러한 유연성이 문제 해결에 도움을 줌

    ‣   ORM이 자체적인 룰을 많이 가지고 그에 기반하여 스키마가
        구성되면, 프로젝트 전체가 그 ORM에 의존하게 되어 막장이
        될 수 있음
저희는 이럴 때 좋았어요.

‣   LBS 법 때문에 위치 정보를 암호화해야 했음

‣   기존 코드가 암호화하지 않은 위치정보를 다양히 참
    조하여 꽤 큰 작업이 될 수도 있었음

‣   Hybrid Attributes 이용해 기존 코드를 거의 고치지
    않고 저장 정보를 암호화함

    ‣   http://spoqa.github.com/2011/12/10/sqlalchemy-hybrid-
        attributes.html
hybrid property 정의
    @hybrid_property
    def lat(self):
        return float(aes_decrypt(self.encrypted_lat))

    @lat.expression
    def lat(cls):
        decrypted = expr.func.aes_decrypt(
            expr.func.unhex(cls.encrypted_lat), aes_key)
        return cast(decrypted, db.Float(25))

    @lat.setter
    def lat(self, value):
        self.encrypted_lat = aes_encrypt(str(value)[:16])


써보면...
>>> Place.query.filter(Place.lat - 37.52 > 0.01).count()
2011-12-10 02:26:57,731 INFO sqlalchemy.engine.base.Engine SELECT count(*) AS count_1
FROM ...
FROM place
WHERE aes_decrypt(unhex(place.encrypted_lat), %s) - %s > %s) AS anon_1
2011-12-10 02:26:57,731 INFO sqlalchemy.engine.base.Engine ('1234567890123456',
37.520000000000003, 0.01)
8L
>>>
도입시 고민할 것들
교육

‣   일반적인 SQL 문법정도는 미리 알고 시작하세요.

‣   스터디의 99%는 공식 사이트의 문서로!

    ‣   처음엔 순서도 뒤죽박죽이고 알기 어려웠는데,
        점점 보기 좋아지고 있어요.

    ‣   Flask-SQLAlchemy를 쓰신다면
        해당 라이브러리의 튜토리얼도 아주 좋습니다.
이거 보지 마세요.
DB Migration


‣   과거엔 sqlalchemy-migrate를 많이 썼어요.

‣   근데 이거 문제가 좀 있어요.

    ‣   http://blog.dahlia.kr/post/8153601295

‣   그리고 불편해요.
alembic

‣   A new database migrations tool,
    written by the author of SQLAlchemy

‣   Full support for transactional DDL

‣   "auto generation" of migrations

‣   저희도 이번에 옮겨요. 많이 안정화 됐다길래...
정리
정리
‣   복잡한 쿼리 작성과 처리가 어려운 예외 상황에 부딪
    혀 ORM에 치를 떨고 계신 분들, 어서오세요.

‣   여러 회사에서 적극적으로 쓰고 있으니 0.x라고 두려
    워 마시고 시도해보셔도 좋아요.

‣   교육은 공식 문서로. 오라일리북은 피하시고...

‣   마이그레이션은 sqlalchemy-migrate가 많이 쓰여왔
    으나 alembic을 시도해보세요.
감사합니다.

Contenu connexe

Tendances

[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?Sang-ho Choi
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?Kyoung Up Jung
 
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃Kwangyoun Jung
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Kyoung Up Jung
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!WooYoung Cho
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPTJinKyoungHeo
 
처음배우는 자바스크립트, 제이쿼리 #3
처음배우는 자바스크립트, 제이쿼리 #3처음배우는 자바스크립트, 제이쿼리 #3
처음배우는 자바스크립트, 제이쿼리 #3성일 한
 
안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트병한 유
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brickyongwoo Jeon
 
Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기영우 박
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4성일 한
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&httpDong Jun Kwon
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리은숙 이
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
Django로 쇼핑몰 만들자
Django로 쇼핑몰 만들자Django로 쇼핑몰 만들자
Django로 쇼핑몰 만들자Kyoung Up Jung
 
Django in Production
Django in ProductionDjango in Production
Django in ProductionHyun-woo Park
 

Tendances (20)

[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
[커빙 아키텍쳐] 커빙은 어떻게 소셜 컨텐츠를 모아올까요?
 
테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?
 
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
 
Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기Django를 Django답게, Django로 뉴스 사이트 만들기
Django를 Django답게, Django로 뉴스 사이트 만들기
 
ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!ECMAScript 6의 새로운 것들!
ECMAScript 6의 새로운 것들!
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPT
 
처음배우는 자바스크립트, 제이쿼리 #3
처음배우는 자바스크립트, 제이쿼리 #3처음배우는 자바스크립트, 제이쿼리 #3
처음배우는 자바스크립트, 제이쿼리 #3
 
안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트
 
Web Components 101 polymer & brick
Web Components 101 polymer & brickWeb Components 101 polymer & brick
Web Components 101 polymer & brick
 
Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기
 
처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4처음배우는 자바스크립트, 제이쿼리 #4
처음배우는 자바스크립트, 제이쿼리 #4
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&http
 
Light Tutorial Django
Light Tutorial DjangoLight Tutorial Django
Light Tutorial Django
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리헷갈리는 자바스크립트 정리
헷갈리는 자바스크립트 정리
 
4-1. javascript
4-1. javascript4-1. javascript
4-1. javascript
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
Django로 쇼핑몰 만들자
Django로 쇼핑몰 만들자Django로 쇼핑몰 만들자
Django로 쇼핑몰 만들자
 
Django in Production
Django in ProductionDjango in Production
Django in Production
 
Javascript 101
Javascript 101Javascript 101
Javascript 101
 

Similaire à 회사에서 써보는 SQLAlchemy

The roadtocodecraft
The roadtocodecraftThe roadtocodecraft
The roadtocodecraftbbongcsu
 
파이썬 데이터베이스 연결 2탄
파이썬 데이터베이스 연결 2탄파이썬 데이터베이스 연결 2탄
파이썬 데이터베이스 연결 2탄SeongHyun Ahn
 
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기Kenu, GwangNam Heo
 
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여Kwangsung Ha
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQLJAEGEUN YU
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기KwangSeob Jeong
 
Clean code
Clean codeClean code
Clean codebbongcsu
 
Basic Django ORM
Basic Django ORMBasic Django ORM
Basic Django ORMAyun Park
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기Chris Ohk
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법NAVER D2
 
예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기수보 김
 
실전 DataSnap!
실전 DataSnap!실전 DataSnap!
실전 DataSnap!Devgear
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10흥배 최
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVONYounghan Kim
 
[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDWPgDay.Seoul
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
분석과 설계
분석과 설계분석과 설계
분석과 설계Haeil Yi
 
Cloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcampCloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcampSang-bae Lim
 
05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지YoungSu Son
 

Similaire à 회사에서 써보는 SQLAlchemy (20)

The roadtocodecraft
The roadtocodecraftThe roadtocodecraft
The roadtocodecraft
 
파이썬 데이터베이스 연결 2탄
파이썬 데이터베이스 연결 2탄파이썬 데이터베이스 연결 2탄
파이썬 데이터베이스 연결 2탄
 
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
ecdevday8 웹개발자의 약한고리 SQL 뛰어넘기
 
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQL
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
Clean code
Clean codeClean code
Clean code
 
Basic Django ORM
Basic Django ORMBasic Django ORM
Basic Django ORM
 
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
[C++ Korea 3rd Seminar] 새 C++은 새 Visual Studio에, 좌충우돌 마이그레이션 이야기
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
 
예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기
 
실전 DataSnap!
실전 DataSnap!실전 DataSnap!
실전 DataSnap!
 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON
 
[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
분석과 설계
분석과 설계분석과 설계
분석과 설계
 
Cloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcampCloudera session seoul - Spark bootcamp
Cloudera session seoul - Spark bootcamp
 
05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지05. 아키텍트가 알아야할 12 97가지
05. 아키텍트가 알아야할 12 97가지
 
miss_pattern_v2
miss_pattern_v2miss_pattern_v2
miss_pattern_v2
 

회사에서 써보는 SQLAlchemy

  • 2. 저는 이런 사람입니다. ‣ (주)스포카 공동창업자 / 기술 총괄 ‣ 도도포인트 서비스 개발중 ‣ 쉽고 빠른 적립, 스마트한 고객관리 ‣ 300여개 매장 이용 중 ‣ http://dodopoint.com/
  • 4. 이게 뭔가요. ‣ The Python SQL Toolkit and Object Relational Mapper ‣ http://www.sqlalchemy.org/
  • 5. 뭐가 좋은가요. ‣ Function-based query construction ‣ Framework independent ‣ High Performing Architecture ‣ Non-Opinionated
  • 8. SQLAlchemy in Spoqa ‣ 첫 서비스 개발(2011.02)부터 이용 ‣ PostgreSQL에 물려서 쓰고 있음 ‣ 처음에 MySQL이었다가 변경 ‣ 개발팀 6명 중 4명은 회사에서 처음 접함
  • 9. 실전에서 부각되는 SQLAlchemy의 장점들 ‣ 복잡한 쿼리도 만들 수 있다! ‣ DBA의 엄격한 설계 기준 맞추기 ‣ 웹서비스 아닌 곳에서 ORM 쓰기 ‣ 쌩판 처음 보는 테이블에 ORM 씌우기
  • 10. Django ORM class Manufacturer(models.Model): name = models.CharField(max_length=30) class Car(models.Model): manufacturer = models.ForeignKey(Manufacturer, related_name='cars') name = models.CharField(max_length=30) SQLAlchemy from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship, backref class Manufacturer(Base): __tablename__ = 'manufacturers' id = Column(Integer, primary_key=True) name = Column(String(30)) class Car(models.Model): __tablename__ = 'cars' id = Column(Integer, primary_key=True) manufacturer_id = Column(Integer, ForeignKey('manufacturers.id')) name = Column(String(30)) manufacturer = relationship('Manufacturer', backref= backref('cars', lazy='dynamic')) http://lucumr.pocoo.org/2011/7/19/sqlachemy-and-you/
  • 11. 어려워 보이는데요? ‣ 다른 ORM보다는 써야 할 것이 더 많은 편 ‣ 하지만 회사처럼 장기적으로 제품을 개발해야 할 때 는 이러한 유연성이 문제 해결에 도움을 줌 ‣ ORM이 자체적인 룰을 많이 가지고 그에 기반하여 스키마가 구성되면, 프로젝트 전체가 그 ORM에 의존하게 되어 막장이 될 수 있음
  • 12. 저희는 이럴 때 좋았어요. ‣ LBS 법 때문에 위치 정보를 암호화해야 했음 ‣ 기존 코드가 암호화하지 않은 위치정보를 다양히 참 조하여 꽤 큰 작업이 될 수도 있었음 ‣ Hybrid Attributes 이용해 기존 코드를 거의 고치지 않고 저장 정보를 암호화함 ‣ http://spoqa.github.com/2011/12/10/sqlalchemy-hybrid- attributes.html
  • 13. hybrid property 정의 @hybrid_property def lat(self): return float(aes_decrypt(self.encrypted_lat)) @lat.expression def lat(cls): decrypted = expr.func.aes_decrypt( expr.func.unhex(cls.encrypted_lat), aes_key) return cast(decrypted, db.Float(25)) @lat.setter def lat(self, value): self.encrypted_lat = aes_encrypt(str(value)[:16]) 써보면... >>> Place.query.filter(Place.lat - 37.52 > 0.01).count() 2011-12-10 02:26:57,731 INFO sqlalchemy.engine.base.Engine SELECT count(*) AS count_1 FROM ... FROM place WHERE aes_decrypt(unhex(place.encrypted_lat), %s) - %s > %s) AS anon_1 2011-12-10 02:26:57,731 INFO sqlalchemy.engine.base.Engine ('1234567890123456', 37.520000000000003, 0.01) 8L >>>
  • 15. 교육 ‣ 일반적인 SQL 문법정도는 미리 알고 시작하세요. ‣ 스터디의 99%는 공식 사이트의 문서로! ‣ 처음엔 순서도 뒤죽박죽이고 알기 어려웠는데, 점점 보기 좋아지고 있어요. ‣ Flask-SQLAlchemy를 쓰신다면 해당 라이브러리의 튜토리얼도 아주 좋습니다.
  • 17. DB Migration ‣ 과거엔 sqlalchemy-migrate를 많이 썼어요. ‣ 근데 이거 문제가 좀 있어요. ‣ http://blog.dahlia.kr/post/8153601295 ‣ 그리고 불편해요.
  • 18. alembic ‣ A new database migrations tool, written by the author of SQLAlchemy ‣ Full support for transactional DDL ‣ "auto generation" of migrations ‣ 저희도 이번에 옮겨요. 많이 안정화 됐다길래...
  • 20. 정리 ‣ 복잡한 쿼리 작성과 처리가 어려운 예외 상황에 부딪 혀 ORM에 치를 떨고 계신 분들, 어서오세요. ‣ 여러 회사에서 적극적으로 쓰고 있으니 0.x라고 두려 워 마시고 시도해보셔도 좋아요. ‣ 교육은 공식 문서로. 오라일리북은 피하시고... ‣ 마이그레이션은 sqlalchemy-migrate가 많이 쓰여왔 으나 alembic을 시도해보세요.