해결 프로그램에 공개적으로 액세스 할 수 없습니다. sqlalchemy.ext.declarative._deferred_relationship
함수가 사용되며 중첩 된 (숨겨진) resolve_arg
함수가 있습니다.
함수 이름을 확인하기 위해 다음의 로직을 사용
cls
은 (
Base
로부터 유래) 선언적 클래스이다
def access_cls(key):
if key in cls._decl_class_registry:
return _GetColumns(cls._decl_class_registry[key])
elif key in cls.metadata.tables:
return cls.metadata.tables[key]
elif key in cls.metadata._schemas:
return _GetTable(key, cls.metadata)
else:
return sqlalchemy.__dict__[key]
. 코드에서 알 수 있듯이 이름을 확인하는 한 가지 방법은 Foo
클래스를 사용하여 cls._decl_class_registry
구조를 사용하는 것입니다. 문자열을 Foo._decl_class_registry['Blah']
을 사용하여 해결할 수 있습니다.
._decl_class_registry
구조는 단지 파이썬 dict
입니다.
class_registry = {}
Base = declarative_base(class_registry=class_registry)
을 한 다음은 class_registry
매핑에서 직접 클래스를 찾아 볼 수 있습니다 다음 Base
클래스를 만들 때 당신은 또한 당신의 자신의 매퍼를 지정할 수 있습니다.
문자열 관계가 어떻게 처리되는지 궁금하다면 sqlalchemy.ext.declarative._deferred_relationship을보십시오. 생각보다 간단합니다. – BenTrofatter