0

我正在学习在谷歌应用引擎上开发网络应用程序,但遇到了麻烦。我的应用程序中有一些默认用户,我编写了一个函数 createDefaultUsers 来使用我的 python 文件中的信息列表创建一个用户表。我希望每次使用我的应用程序时只创建一次这个用户表,数据就在那里。但是你知道,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()

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

4

1 回答 1

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 命令行参数

于 2012-05-02T14:13:36.037 回答