проектирование базы данных в Google App Engine - PullRequest
1 голос
/ 21 января 2012

Я новичок в GAE, поэтому, если вы хотите помочь, пожалуйста, напишите некоторые детали и пример.

Я пытаюсь сделать две модели БД: Пользователь и Статья. У каждого пользователя может быть какая-то статья. На сервере sql это будет:

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 ]

3 голосов
/ 22 января 2012

Во-первых, хранилище данных Google AppEngine не является реляционной базой данных.Это совершенно другая парадигма.Возможно, вам следует сначала взглянуть на документацию Обзор хранилища данных или Освоение хранилища данных .

По конкретным вопросам:

  1. Уникальный логин и адрес электронной почты : вы должны убедиться, что он еще не существует, поскольку хранилище данных не предоставляет уникальных ограничений.Вы также можете взглянуть на это решение: Добавить уникальное ограничение в Google App Engine .Или вы можете использовать Учетные записи Google .
  2. Первичный ключ для пользователя и Первичный ключ для поиска пользователя : с помощью Google AppEngine вы получите пользователянепосредственно: user = db.GqlQuery("SELECT * FROM Users WHERE login IS :1", login)
  3. Ссылка : вот очень хорошая статья об этом: Моделирование отношений сущностей
1 голос
/ 22 января 2012
  1. В Datastore нет такого понятия, как уникальные ограничения. Единственным свойством, которое гарантированно является уникальным, является ключ сущности (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. Есть несколько способов сделать это. Читайте о моделировании данных .

0 голосов
/ 26 декабря 2013

Не так много книг написано о разработке базы данных для Google App Engine.Самым полезным ресурсом, о котором я узнал, были выступления Брета Солткина в Google I / O .Этот доклад объясняет некоторые магические свойства хранилища данных движка приложения.Я написал подробный блог о моделировании данных в google app engine здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...