2010-05-23 10 views
5

Wydaje się, że StringListProperty może zawierać tylko ciągi górę do 500 znaków każda, podobnie jak StringProperty ...StringListProperty ograniczona do 500 ciągów Char (Google App Engine/Python)

Czy istnieje sposób do przechowywania ciągów dłuższych niż ? Nie potrzebuję ich do indeksowania ani niczego. Potrzebowałbym czegoś takiego jak "TextListProperty", gdzie każdy ciąg na liście może mieć dowolną długość i nie może być ograniczony do 500 znaków.

Czy mogę utworzyć taką usługę? Czy może eksperci proponują inne podejście? Być może powinienem użyć zwykłej listy i wybrać/rozpakować ją w polu Blob, czy coś w tym stylu? Jestem trochę nowicjuszem w Pythonie i GAE i bardzo doceniam wskazówki, zamiast spędzać dni na próbach i błędach ... dzięki!

Odpowiedz

2

Możesz użyć generycznego ListProperty z wymaganym item_type (str lub unicode lub czymkolwiek innym).

+2

Zarówno str i Unicode są również ograniczone do 500 znaków. Ale wtedy próbowałem z db.Text jako typem i jak na razie wygląda na to, że działa. Dzięki za wskazanie mi właściwego kierunku. – MarcoB

4

Alex odpowiedział już dawno temu, ale w przypadku, gdy ktoś inny przychodzi wraz z tym samym numerze:

Można by po prostu zrobić item_type równa db.Text (jak OP wspomina w komentarzu).
Oto prosty przykład:

from google.appengine.ext import db 
class LargeTextList(db.Model): 
    large_text_list = db.ListProperty(item_type=db.Text) 

def post(self): 
    # get value from a POST request, 
    # split into list using some delimiter 
    # add to datastore 
    L = self.request.get('large_text_list').split() # your delimiter here 
    LTL = [db.Text(i) for i in L] 
    new = LargeTextList() 
    new.large_text_list = LTL 
    new.put() 

def get(self): 
    # return one to make sure it's working 
    query = LargeTextList.all() 
    results = query.fetch(limit=1) 
    self.render('index.html', 
      { 'results': results, 
       'title': 'LargeTextList Example', 
      }) 
+1

Dzięki za kod, to jest droga. Należy pamiętać, że każde zadanie musi być typograficzne dla db.Text lub kompilator rzuci wyjątek. Nawet, aby przypisać pusty ciąg znaków, musisz zrobić, na przykład: object.text_list.append (db.Text ("")) – MarcoB