2011-01-27 7 views
3

ヒヤ、私は完全に答えられたキーの使用に関して以前に質問しました。Google App EngineでのPythonのキーまたはID

しかし、私のモデルのキーを作成して使用する方法があるのだろうかと私は思っています。私のiPhone Appの人はデータベースに格納するためにINTが必要だと言いました。 Keysで動作するPythonコードを取得しましたが、現在はトラックを追跡する必要があります。

私はiPhoneのアプリが大きな変更を加えることなく使用できる自動生成キー名と自動生成に関するあなたの意見を聞きたいと思っています。ここで

は私のモデルです:

class User(db.Model): 
    id = db.StringProperty() 
    name = db.StringProperty() 
    image = db.BlobProperty(default=None) 

class Book(db.Model): 
    image = db.BlobProperty() 
    date_added = db.DateTimeProperty(auto_now_add=True) 
    is_active = db.BooleanProperty(default=True) 

class BookUser(db.Model): 
    book = db.ReferenceProperty(Book) 
    user = db.ReferenceProperty(User) 
    is_active = db.BooleanProperty(default=True) 

そして、どのように私は(下)キーを使用してそれらを扱いました。 BookUserレコードにサインインするたびに、それがまだ存在しない場合に作成されます。このデータをすべてiPhoneに送信し、IDをデータベースに保存する必要があります。私は、iPhoneの開発者に "それを吸う"ように言わなければならないと思っています。

また、以下の方法で改善できますか?

### Get the Users Details 
user_id = 1 
user = User.get_by_key_name(user_id) 
user_key = user.key().name() 

### Get the latest active Book 
book = Book.all().filter('is_active =', True).get() 
book_key = book.key().name() 

### Get latest Book for this User 
bookuser_key_name = "%s:%s" % (str(book_key), str(user_key)) 
bookuser = BookUser.get_or_insert(bookuser_key_name) 
bookuser.card = card 
bookuser.user = user 
bookuser.put() 
+0

まず、「iPhone App Guy」にINTを使用するように指示した理由を尋ねる必要があります。 –

+0

用語についての注意:すべてのエンティティにはキーがあります。 idまたはkey_nameはキーの一部です。 – geoffspear

答えて

0

あなたの見た目はきれいです。あなたのiPhone開発者は、あなたがそれらを使いたくないという具体的な理由がありますか?

1

フィールド名に「id」だけを使用しないでください。これは、コーディング時にデータキーのid()と混同される可能性があります。 http://code.google.com/appengine/docs/python/datastore/keyclass.html

user_idは良い選択です。

intを使用したいあなたの「iPhoneの男」は非常に懸念しています。実際にIDに逐次のint値を依存させたり、使用したりすることは望ましくありません。クラスター化された環境では正しく処理するのが難しいというだけでなく、IDが容易に推測できるようなセキュリティ上の問題を引き起こす可能性があります。

関連する問題