如何将数据存储中值为 True 的所有属性移动到另一个数据存储?

问题描述 投票:0回答:1

有没有办法将模型中值为 True 的所有属性移动到另一个模型? 我正在用 Python 编写并具有以下内容:

 class crimechecker(webapp.RequestHandler):
    def get(self):
        #Checks for crime
        articles = Article.all().filter('crime = ', None)
        for article in articles:
            crime = False
            for word in triggers:
                body = article.body
                if body.find(word) != -1:
                    crime = True
            article.crime = crime
            a = article.put()

然后运行一个单独的 cron:并将每个犯罪故事及其位置添加到 Story 中。 但故事并没有出现在故事模型中?!

class place(webapp.RequestHandler):
    def post(self):
        # Check for any article which was classified as "TRUE" therefore it is a crime document
        crimes = Article.all().filter('crime = ', True)
        for crimestory in crimes:
            if Story.all().filter('title = ', crimestory.title).count() == 0:
                #Yahoo Placemaker key
                p = placemaker('HSnG9pPV34EUBcexz.tDYuSrZ8Hnp.LowswI7TxreF8sXrdpVyVIKB4uPGXBYOA9VjjF1Ca42ipd_KhdJsKYjI5cXRo0eJM-')
                #Encoding for symbols and euro signs etc.
                print p.find_places(crimestory.body.encode('utf-8'))
                for place in p.places:
                    splitted = place.name.split()
                    #Check for locations within Ireland (IE)
                    if 'IE' in splitted:
                        story = Story(long=place.centroid.longitude, lat=place.centroid.latitude, link=crimestory.link, loc_name=place.name, title=crimestory.title, date=crimestory.date).put()
                        logging.info(story)

我有 2 个模型:文章和故事。 所有文章都存储在文章模型中,任何带有crime = True 的文章都设置在Story 模型中。 由于某种原因,它并没有推动故事的发展。 cron 正在运行并且没有任何日志错误。 我可以在我的仪表板中执行此任务吗? 我已经查询过这两种型号了:

从文章中选择 * 按日期 DESC

文章模型有今天(5 月 2 日)以来的故事

Story 包含 4 月 19 日以来的文章,此后不再有文章。 我可以查询模型并说将所有犯罪设置为真实的实体转移到故事模型吗?

python google-app-engine cron google-cloud-datastore gql
1个回答
1
投票

我没有发现你的代码有任何明显的错误。由于我们已经确定不存在错误,因此我的建议是在更高的位置添加更多的logging.info调用,以查看哪个if语句的计算结果为false,或者哪个for循环正在空集上迭代。另外,您是否确认 Crimechecker 已成功将新的犯罪故事设置为 True?听起来您似乎还没有确定两个 cron 作业中哪一个有问题。

更根本的是,我认为你应该重新考虑这个任务的基本设计。让我们将其分为 3 个步骤:

  1. 用户创建一个带有标题和正文的新文章实体
  2. 如果正文包含某些关键字,请将其标记为包含犯罪行为。
  3. 如果包含犯罪行为,则创建相应的 Story 实体。

为什么不在保存文章时在一个处理程序中完成所有这些工作?为什么要把它分成三个不同的部分?除了使操作变得复杂之外,您的第二个 cron 作业在规模上也效率低下。您将从一开始就获取每个犯罪故事,并对每个故事进行一次查询,看看是否有相应的故事。如果您积累了大量文章,这将无法及时完成。

如果您担心首次保存文章时执行所有这些任务会对性能产生影响,请使用任务队列。首次保存文章时,创建一个任务来扫描其中是否有犯罪关键字。如果找到关键字,则创建一个任务来存储相应的故事实体。在任务参数中传递实体键,这样您就不必查询任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.