데이터 저장소에 ~ 850 개의 그룹과 ~ 19,000 개의 항목이 있습니다. 각 항목은 내가 그룹과 항목 표현 내 응용 프로그램의 두 가지 모델이, 하나 개의 그룹에 속할 수 있습니다 :GQL이 필터의 ReferenceProperty를 인식하지 못함
class Group(db.Model):
Id = db.IntegerProperty()
Name = db.StringProperty()
# ... some other properties
class Item(db.Model):
Id = db.IntegerProperty()
Name = db.StringProperty()
Group = db.ReferenceProperty(Group, collection_name="groupItems")
# ... some other properties
내가 특정 항목을 볼 수있는 데이터 저장소 관리를 사용할 수 있습니다 (즉 WHERE 식 (34)) 및 이 그룹에 올바르게 연결되어 있는지 볼 -
SELECT * FROM Item WHERE Id = 34
이 나에게 다음과 같은 특성을 가진 그룹을 제공합니다
Decoded entity key: Group: id=10321
Entity key: agtzfmV2ZS1taW5lcnIMCxIFR3JvdXAY0VAM
Id: 18
내가 얻을이 그룹에 대한 모든 항목을 검색하기 위해 내 GQL 쿼리를 변경하는 경우 결과가 없습니다! - 난 그냥 그룹을 검색 할 경우
SELECT * FROM Item WHERE Group = KEY('agtzfmV2ZS1taW5lcnIMCxIFR3JvdXAY0VAM') -- No Results
SELECT * FROM Item WHERE Group = KEY('Group', 'agtzfmV2ZS1taW5lcnIMCxIFR3JvdXAY0VAM') -- No Results
, 그것은 예상대로 작동 -이 똑같이 내 파이썬 코드에 적용
SELECT * FROM Group WHERE __key__ = KEY('agtzfmV2ZS1taW5lcnIMCxIFR3JvdXAY0VAM') -- Returns 1 Group
합니다. 전화 :
group = Group.gql("WHERE Id = :1", 18).get()
items = Item.gql("WHERE Group = :1", group).fetch(50)
결과로 항목이없는 목록이 생성됩니다. 마찬가지로
group.groupItems.fetch(500) -- Returns no results
내 질문은 - 나는 뭔가 어리석은 짓을하고 있는가? 비슷한 구조의 더미 프로젝트를 작성하여 이름 지정 문제가 아니라는 것을 증명해주었습니다 (즉, 그룹은 예약어가 아닙니다). (관심이있는 경우 첨부).
내가 뭘 잘못하고 있니?
편집 1 : 요청으로
, 여기에 생성 코드입니다. Reader는 BLOB 저장소에 저장된 CSV를 여는 csv 판독기 (inbuilt csv 라이브러리 사용)입니다. 모든 의도와 목적을 위해 단순히 CSV 파일을 구문 분석합니다. 상술 한 바와 같이. 내 대시 보드를 통해 데이터 뷰어에서 그룹에 올바르게 바인딩 된 항목 (그룹이 항목 옆에 나열되어 있으며 해당 링크를 클릭하여 그룹을 볼 수 있음) 그러나 그룹을 필터의 일부로 항목에 전달할 때 결과가 없습니다 반환 -
그룹 -
reader = UploaderBase().open_from_blobstore(Settings().get_group_csv_key())
upNum = 0
groupsToPut = []
for row in reader:
group = Group(Id=int(row[0]))
group.Name = row[2]
groupsToPut.append(group)
db.put(groupsToPut)
아이템 - 당신이 데이터를 삽입 할 때
groupCache = {}
for group in Group.all().fetch(1000):
groupCache[group.Id] = group
logging.info("Cached %d group entries locally" % len(groupCache))
items = []
reader = UploaderBase().open_from_blobstore(Settings().get_items_csv_key())
upNum = 0
for row in reader:
logging.debug("Adding row %d" % upNum)
item = Item(Id=int(row[0]))
if not row[1] is None and row[1] != "":
item.Group = groupCache[int(row[1])]
item.Name = row[2]
items.append(item)
db.put(items)
실제로 Item.Group 필드에 저장하는 것과 관련된 문제가있는 것처럼 보입니다. 엔티티 생성 코드를 게시 할 수 있습니까? –
'Id'속성을 기반으로 필터링하려고 시도했지만 'Id'속성 (34)의 값이 아닌 키 (18)의 ID를 전달하면 Python 코드가 작동하지 않습니다. ID 속성을 완전히 삭제하고 데이터 스토어에서 생성 된 ID 또는 키 이름 만 사용하면됩니다. –
일치하는 레코드가 없기 때문에 단순히 GQL 문이 성공하지 못하는 것 같습니다.일치해야한다고 생각하는 레코드를 검색하고 Group 속성을 확인하려고 시도 했습니까? 또 하나의 가능성은 데이터를로드 할 때 속성을'indexed = False'로 설정했다는 것입니다. –