每次我使用我的网络应用程序时,我只是再次创建我的数据表。如何解决这个问题?

时间:2012-05-02 13:22:09

标签: google-app-engine google-cloud-datastore

我正在学习在谷歌应用引擎上开发网络应用,我遇到了麻烦。 我的应用程序中有一些默认用户,我编写了一个函数createDefaultUsers来创建一个User表,使用我的python文件中的信息列表。我希望只创建一次这个User表,每次我使用我的应用程序时,数据就在那里。但是你知道,createDefaultUsers函数在我的python文件中,所以,在我使用我的应用程序时,我只是一次又一次地创建这个User表。 OGM~我该如何解决这个问题呢?

另一个问题: 如何清除本地数据存储区?它可能有助于我调试我的应用程序,你知道,有时我只想重新开始。

-------------- ----------------更新

例如,以下是一些默认用户:

defaultUsers = [
('qingWANG','wang123456','wangqing@saad.com','teacher'),
('stevenYANG','123456','yifan@gmail.com','student'),
('jingZHU','zhu123456','zhujing@example.com','student'),
('conghuiHE','he123456','conghui@where.com','student'),
('lianDUAN','duan123456','duanlian@what.com','student'),
('xinHAO','hao123456','haoxin@example.com','student')]

这是我创建用户的函数:

def createDefaultUsers():
"""
create default user table
"""
for user in defaultUsers:
    users = Users(name = user[0], password = user[1],
                  email = user[2], role = user[3])
    users.put()

在我的第一次想到的时候,我把createDefaultUsers放在这里:

def main():
    createDefaultUsers()
    run_wsgi_app(app)
if __name__ == "__main__":
    main()

我的本​​地测试很好。但是当我部署它时,它不起作用(似乎没有用户创建)。我哪里错了?

1 个答案:

答案 0 :(得分:1)

您可以轻松修改该功能以检查是否有现有用户,如果有,请不要创建它们:

def createDefaultUsers():
    """
    create default user table
    """
    user_count = Users.all().count(1)
    if user_count == 0:
        for user in defaultUsers:
            new_user = Users(name = user[0], password = user[1],
                  email = user[2], role = user[3])
            new_user.put()

请注意,count()查询操作很昂贵,因为它实际上从数据存储区中检索所有实体以便对它们进行计数,因此在通常的做法中应避免使用它,但是通过指定限制为0在这种情况下,我们可以简单快捷。

您可以通过将命令行参数--clear-datastore传递给开发服务器来清空开发数据存储区。以下是dev_appserver.py command line arugments

的全部内容