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

标签 python google-app-engine cron google-cloud-datastore gql

有没有一种方法可以将模型中所有属性的值设置为 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 中。 但是故事没有出现在 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 正在运行并且没有任何日志错误。 我可以在我的仪表板中执行此任务吗? 我查询了这两个模型:

SELECT * FROM Article ORDER BY date DESC

文章模型包含今天(5 月 2 日)的故事

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

最佳答案

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

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

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

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

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

关于python - 如何将值为 True 的数据存储中的所有属性移动到另一个数据存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5856271/

相关文章:

python - 使用 if else 语句求三角形的面积

python - 为什么我得到的语法无效

python - pip3 install mysql-python 失败,错误代码为 1 in/tmp/pip-install-4nev4id4/mysql-python/

python - main.py 或 app.yaml 是否确定此示例中 App Engine cron 任务使用的 URL?

每 25 小时执行一次定时任务?

javascript - Google 图表上的奇怪行为

google-app-engine - 使用 Play Framework 和 Google App Engine 的 HttpOnly/secure cookies

python - 谷歌应用引擎过多的数据存储小操作

java - 为 Google App Engine 列出 Java 中的属性 - 这是最高效、性能最高的 JDO 代码吗?

cron - 每年1月1日的Cronjob