반응형

프로그래밍/database 3

sql 쿼리 Join시 카테시안 곱 주의(with sqlAlchemy)

보통 JOIN 시에 조건을 주지 않았을 때 발생한다고 한다. 상식적으로 생각해봐도 JOIN 조건이 없다면 기준이 되는 테이블(Outer Table)과 대상 테이블(Inner Table) 간에 관계가 만들어지지 않는다. postgresql 쿼리에서 JOIN 문이 ON 조건없이 조인을 할 수 없으며, 위 내용의 조건이란 다음과 같은 쿼리를 의미한다. 조건없는 조인SECLECT * FROM Table1, Table2; 조건있는 조인SELECT * FROM Table1, Table2 WHERE TABLE1.id = TABLE2.id; 위 예의 조건없는 조인과 같이 관계(WHERE)가 만들어지지 않은 채로 JOIN을 하게 되면 Error가 발생하지 않고 양 테이블의 row간에 대카테시안 곱의 방식의 결합이 일어난..

sqlAlchemy, Foreign Key, relationship, remote_side 정리

문서가 너무 방대해서 다 이해하지 못한채로 대략 정리한다. sqlAlchemy는 컬럼에 Foreign Key를 설정한 후 orm을 위한 관계 설정을 relation 함수로 한다. relation 함수는 기본적으로 Foreign Key는 한개로 가정하므로 Foreign Key 설정된 컬럼을 지정할 필요가 없다. 그러나 테이블 내에서 Foreign Key를 2개이상 사용할 경우는 지정해야한다. 지정하는 방법은 relation 함수에서 primaryjoin 설정 또는 foreign_keys 를 설정하는 방법인 듯 하다.참조, 2개 이상의 Foreign key remote_side는 자기참조 관계에서 primary key 지정에 사용되는 것 같다. 지정은 반드시 "자신의모델(클래스명).primaykey컬럼" 을..

sqlalchemy uselist와 참조무결성 on postgresql

python으로 된 백엔드 프레임 워크는 django를 사용하고 있습니다. 최근 몇가지 문제로 다른 프레임워크에 대해 살펴보고 있구요. 후보군으로는 golang의 gingonic과 python의 fastAPI입니다. 프레임워크의 이동은 간단한 것이아니기 때문에 다양한 기술에대해 살펴볼 필요가 있습니다. 최근 뜨고있는 fastAPI를 살펴보면서 ORM으로 sqlalchemy에 대해 알 필요가 있다고 여겨져서 이리저리 살펴보는 중입니다. 사실 django에서도 raw Query로 대부분을 개발해왔기 때문에 raw Query가 편하긴 합니다. 하지만 개발 속도와 가독성있고 안정적인 코드를 위해 약간의 성능을 포기하는 것도 나쁘지 않다고 생각되었네요. 어쨌든 sqlalchemy에 대한 해외 문서들을 살펴보던 중..

반응형