Skip to main content
 首页 » 编程设计

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

2025年05月04日7mq0036

有没有一种方法可以将模型中所有属性的值设置为 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 作业在规模上也是低效的。您正在获取自时间开始以来的每一个犯罪故事,并对每个故事进行一次查询以查看是否有相应的故事。如果您积累了大量的文章,这将无法及时完成。

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