저는 일종의 미니 ERP로 간주되는 중소기업 용 웹 응용 프로그램을 만들고 있습니다. webapp은 AngularJS로 구축되었으므로 서버 측을 주로 사용하여 데이터베이스를 관리하고 멋진 REST API를 제공합니다.SQLAlchemy ORM 쿼리 결과를 ORM 개체를 만드는 대신 JSON으로 변환
나는 ORM으로 작업하는 것을 정말 좋아하며, 내 요구에 꼭 맞습니다. 데이터베이스 계층에 SQLAlchemy를 사용하기 때문에 매우 쉽고 편리하게 사용할 수 있습니다 (그리고 Python을 좋아합니다). 그러나 SQLAlchemy의 ORM 계층을 사용할 때 일부 엔티티에 결과 (필요한 경우 하위 포함)를 쿼리하려는 경우 요구 된 쿼리를 실행하지만 결과를 얻을 때마다 파이썬이 생성됩니다 각각의 결과에 대한 객체 및 또한 (내 이해에 따라) 결과 객체를 유지 관리하는 많은 작업을 수행하므로 사용자가 함께 작업하고 데이터베이스와 동기화 상태를 유지할 수 있습니다. 그러나 결과를 랩핑하고 SQLAlchemy 엔티티를 생성하는 것은 (SQLAlchemy에서 unit-of-work라고 부름), 결과를 (튜플을 통해) 얻는 것과는 대조적으로 매우 느립니다 (수천 개의 결과는 몇 초 정도 걸립니다). 꽤 빠릅니다.
AngularJS를 사용하고 있기 때문에, 원하는 것은 먼저 Python 객체로 변환하고 불필요한 작업을 수행하는 대신 JSON으로 변환된다는 것입니다. 중첩 된 쿼리 및 관계를 관리하는 데 도움이되므로 ORM을 사용하는 것이 좋습니다. 그러나 선택의 여지가 없으면 아마 SQLAlchemy Core로 되돌아갑니다.하지만이 구문을 분석하는 것은 매우 어려울 것입니다. 결과는 JSON 개체로 (그리고 REST API에 대한 모든 쿼리를 관리합니다. 일부는 사용자가 작성한 사용자 정의 쿼리가 될 것입니다. 결국 관리 시스템입니다 ...). SQLAlchemy의 ORM은 이미 결과를 구문 분석하고 쿼리를 생성하기 때문에 순수한 Python 객체를 만드는 대신 JSON 객체 (실제로는 Python의 사전과 목록 일 수 있음)를 만들고 싶습니다.
아이디어 내가 원하는 것을 성취하는 방법?
TL; DR :
읽기 표제. 당신이 가장 recentish의 PostgreSQL을 사용할 수있을만큼 운이 좋은 경우
그렇지 않습니다! 나는 파이썬 객체 내부에서 결과를 완전히 감싸는 것을 피하고 원시 사전 (JSON과 같은 형식)으로 직접 돌려주고 싶다. 당신이 참조하는 질문은 Python 객체를 jsonify하는 방법을 묻습니다 (질문에서 OP 케이스는 Model 기본 클래스의 인스턴스입니다). 앞에서 말했듯이, 파이썬 객체 내부에 결과를 래핑하고 SQLAlchemy가하는 모든 추가 작업을 수행하는 것은 매우 느리며 필요 없습니다. 추가 작업없이 사전 내에서 결과를 원합니다. – rboy
수 없습니다. 당신이 얻을 수있는 가장 가까운 것은 orm 대신 코어 레이어를 사용하는 것입니다. 그래도 링크 된 질문에 설명 된 내용을 수행해야합니다. 죄송 합니다만, 여전히 복제본입니다. – davidism