flask-sqlalchemy multiple databases

사용하기 flask-sqlalchemy 에서 기본적으로 SQLALCHEMY_DATABASE_URI 설정을 통해서 mapping class 에 정의된 테이블들이 DB와 연결되게 된다. 그런데 1개 이상의 DB와 연결해야하는 경우가 생긴다. 기존의 회원정보를 같이 쓰는 다른 서비스의 경우가 대표적인 케이스이다. 이럴경우, flask-sqlalchemy 에서는 SQLALCHEMY_BINDS 를 통해서 여러 데이터베이스 URI를 지정할 수 있게 해주고 있다. app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@localhost:3306/test1' app.config['SQLALCHEMY_BINDS'] = { 'test2': 'mysql+pymysql://root:root@localhost:3306/test2', 'test1': 'mysql+pymysql://root:root@localhost:3306/test1' } 위의 설정을 보면, SQLALCHEMY_DATABASE_URI 를 지정하면서 SQLALCHEMY_BINDS 를 지정하고 있다. SQLALCHEMY_BINDS 는 키-값 형태로 지정하면 되는데, test1, test2 와 같이 지정을 해두었다. SQLALCHEMY_DATABASE_URI 에 지정한 값은 디폴트 값으로 지정되게 된다. class User(db.Model): __tablename__ = "tb_user" __bind_key__ = 'test2' id =

SQLAlchemy with StoreProcedure

(adsbygoogle = window.adsbygoogle || []).push({}); 제목자체가 역설적이지만, 이렇게 써야 할때가 있다. 예를들면, 레거시를 다시 재개발하는 수준에서 특정 프로시저는 단순히 db를 조회하는 것 이상의 프로그래밍적인 기능을 가지고 있을때가 있다. 또한, 다른 이유로 ORM인 SQLAlchemy와 저장프로시저를 혼합해야할 때가 있는데, 그럴때 따로 저장프로시저용 코드를 쓰기 보다는 SQLAlchemy 를 이용해서 프로시저를 실행하고 값을 가져오는 것이 좋다. 개인적으로 SQLAlchemy를 써서 좋다고 생각하는 이유는 유지보수 하는 입장에서 DB연결 문자열 등과 같은 관리포인트도 하나로 유지하면 좋고, ORM 외에 몇개의 프로시저를 위해서 DB연결 라이브러리에 종속적인 코드를 짜고 싶지 않다는 것을 느꼈다.(안된다는 것이 아니다.) 위의 코드는 Flask-SQLAlchemy 로 짠 코드인데, 일반 SQLAlchemy를 아시는 개발자라면 쉽게 이해할 수 있는 코드이다. 다른 것보다도 raw_connection() 함수에 대해서 설명하자면 프록시된 DBAPI 연결 객체를