현재 프레임 워크 플라스크 및 sqlalchemy와 관련된 프로젝트를 진행 중입니다. 기본 아이디어는 티켓 종류가 다른 티켓 시스템을 사용하는 것입니다.flask_sqlalchemy : 하위 클래스가 질의 될 때까지 AbstractConcreteBase가 매핑되지 않았습니다.
내 코드의 간략한 버전은 https://github.com/Birne94/flask-sqlalchemy-ticket-setup (실행 가능 코드 : python app.py
)입니다. A : 기본적으로 그냥 id
및 테이블 이름
TimestampMixin을 정의하고, 모든 모델의 기본 클래스 :
자료 :
셋업은 모델의 집합을 포함 생성 또는 업데이트 타임 스탬프와 같은 모델에 타임 스탬프를 추가하는 mixin
티켓 : 현재 발생한 문제의 주요 원인. 모든 종류의 티켓을위한 추상 기본 클래스입니다.
TestTicket :
Ticket
클래스를 조회하려고, 내가가 나타납니다 데모 목적
현재의 문제에 대한 일부 티켓 클래스는, 나는 데 다음이다 다음과 같은 오류 :
sqlalchemy.exc.InvalidRequestError: SQL expression, column, or mapped entity expected - got '<class 'models.Ticket'>'
전체 스택 추적 : https://gist.github.com/Birne94/bac3254163c8248df192521729857641
나는 셋업에 많은 성공을 거두고 실험을하고있었습니다. 무작위로, 나는 초기 쿼리 전에 서브 클래스에 쿼리를 추가하려고 시도했다.
코드 깊숙이 들어가면 하위 클래스를 쿼리 할 때 매퍼가 처음 구성됩니다. 기본 클래스를 쿼리 할 때 발생하지 않습니다.
위의 예제 (app.py
, 줄 15ff)에 나와 있습니다. 끝점에 액세스하면 첫 번째 쿼리가 실패합니다. 두 번째 쿼리 (어떤 작품), 처음에 실패한 쿼리를 실행 한 후, 의지는 이제 작동 :
query failed query successful on second try 127.0.0.1 - - [25/Oct/2016 14:42:22] "GET/HTTP/1.1" 200 -
이제 ... 내가/실종 잘못하고 나하고 분명 뭔가가 실제 문제와 함께있다 SQLAlchemy에서 매퍼 구성?
미리 감사드립니다.
답장을 보내 주셔서 감사합니다. 당신 말이 맞아요.'TestTicket'도 만들어야합니다. 'Ticket'은 지속되지 않지만 쿼리 가능한 기본 클래스입니다. [documentation] (http://docs.sqlalchemy.org/en/latest/orm/extensions/declarative/api.html#sqlalchemy.ext.declarative.AbstractConcreteBase)에 주어진 예제에서 기본을 쿼리 할 수 있어야합니다. 클래스 직접. 매퍼 구성이 여기에서 지연되는 것을 알고 있지만 왜 전혀 발생하지 않습니까? 수동으로 트리거 할 수 있습니까? – Birne94
@ Birne94 모델을 모두 정의한 후에 구성했을 것입니다. 나는 polymorphic loading을 원한다면 필요로하는 discriminator ('mapper_args'의'polymorphic_on' 필드)가 없다고 믿을 수 있습니다. (일반적인 경우, 이것이 당신이 원하는 것입니다.) - 정의되지 않았다면 대신 클래스가 쿼리 될 때 사용되지만 일반적인 구성이 아닌 파생 된 SELECT 문에 정의 될 수 있습니다. 그리고'with_polymorphic'을'Ticket'에 대한 쿼리로 시도하십시오 - 이것에 대해 100 % 확신 할 수 없으며'configure_mappers'를 수동으로 호출 할 수 있는지도 모릅니다. 노력할만한 가치가 있습니다. – sytech
'polymorphic_on'을 사용하지 않고'with_polymorphic'을 사용하지 않으면 작동하는 쿼리가 생깁니다. 나는 모든것을 올바르게 설정하는 것으로 보이는 응용 프로그램 시작시'configure_mappers'를 호출하여이 문제를 해결했습니다. – Birne94