2012-01-21 4 views
1

Я новичок в GAE, поэтому, если вы хотите помочь, напишите некоторые подробности и пример.создание базы данных в Google App Engine

Я пытаюсь сделать две модели db, User и Article. У каждого пользователя может быть какая-то статья. В SQL Server это будет:

create table User 
(
    id int primary key identity(1,1), 
    login nvarchar(50) unique not null, 
    password nvarchar(50) not null, 
    email nvarchar(50) unique not null, 
) 

create table Article 
(
    userId int references User(id) not null, 
    topic nvarchar(50) not null, 
    content nvarchar(max) not null 
) 

В питоне я стараюсь:

class Article(db.Model): 
    topic = db.StringProperty(multiline=False) 
    content = db.StringProperty(multiline=True) 

class User(db.Model): 
    login = db.StringProperty() 
    email = db.EmailProperty() 
    password = db.StringProperty(multiline=False) 
    articles = db.ListProperty(int) #here I want to do db.ListProperty(Article), but I can't. So I want to keep here id of article. 

И мои вопросы:

  • как я могу обеспечить, что логин и адрес электронной почты будет уникальным
  • как я могу получить первичный ключ для пользователя (в sql

    select id from User where login = 'sada' and password = 'sd' 
    
  • как я могу использовать этот первичный ключ для поиска пользователя
  • как я могу добавить новую статью для пользователя, если я хочу сохранить идентификатор в пользовательских статьях

Может быть, это какой-то лучший способ сделать это, с удовольствием, я получу лучшее решение

ответ

3

Сначала хранилище данных Google AppEngine не является реляционной базой данных. Это совершенно другая парадигма. Возможно, вам стоит сначала взглянуть на Datastore Overview documentation или Mastering the datastore.

Что касается ваших конкретных вопросов:

  1. Unique Логин и адрес электронной почты: вы должны проверить, что он уже не существует, потому что хранилищу не обеспечивает уникальные контрсилами. Вы также можете посмотреть это решение: Add a Unique Constraint to Google App Engine. Или вы можете использовать Google Accounts.
  2. Первичный ключ для пользователя и первичного ключа для поиска пользователя: с помощью Google AppEngine вы бы получить пользователь непосредственно: user = db.GqlQuery("SELECT * FROM Users WHERE login IS :1", login)
  3. Reference: здесь есть очень хорошая статья о нем: Modeling entity relationships
1
  1. В хранилище данных нет таких ограничений, как уникальные ограничения. Единственным свойством, которое гарантировано является уникальным, является ключ объекта (key_name). Вы можете комбинировать логин и электронную почту в одной строке и использовать ее как key_name. Это, конечно, несколько ограничивает возможность изменения имени пользователя и пароля (вам нужно создать новый объект и переписать ссылки).

  2. Используйте этот код (keys_only означает только ключ возвращается вместо всего объекта)

    query = db.Query(User, keys_only=True) 
    query.filter('login =', 'sada') 
    query.filter('password =', 'sd') 
    user_key = query.get() 
    
  3. Как это

    db.get(user_key) 
    

    , если у вас нет ключа, создать один:

    user_key = Key.from_path(User, id_or_name) 
    
  4. Существует несколько способов сделай это. Читайте перевод информации о data modeling.

0

Существует мало книг о проектировании базы данных для движка Google. Самый полезный ресурс, который я нашел, был Bret Saltkin's talks in the Google I/O. Этот разговор объясняет некоторые магические свойства хранилища данных приложения. Я написал подробный блог о data modeling in google app engine here.

Смежные вопросы