小编imp*_*ren的帖子

我该如何在WHERE子句中编写带有子查询的Django查询?

我正在使用Django和Python 3.7。我在弄清楚如何编写Django查询(其中有一个子查询作为where子句的一部分)时遇到了麻烦。这是模型...

class Article(models.Model):
    objects = ArticleManager()
    title = models.TextField(default='', null=False)
    created_on = models.DateTimeField(auto_now_add=True)


class ArticleStat(models.Model):
    objects = ArticleStatManager()
    article = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='articlestats')
    elapsed_time_in_seconds = models.IntegerField(default=0, null=False)
    votes = models.FloatField(default=0, null=False)


class StatByHour(models.Model):
    index = models.FloatField(default=0)
    # this tracks the hour when the article came out
    hour_of_day = IntegerField(
        null=False,
        validators=[
            MaxValueValidator(23),
            MinValueValidator(0)
        ]
    )
Run Code Online (Sandbox Code Playgroud)

在PostGres中,查询看起来类似于

SELECT *
FROM article a,
     articlestat ast
WHERE a.id = ast.article_id
  AND ast.votes > 100 * (
    SELECT "index" 
    FROM statbyhour 
    WHERE hour_of_day …
Run Code Online (Sandbox Code Playgroud)

python django postgresql subquery python-3.x

6
推荐指数
1
解决办法
1134
查看次数

python多处理初始化的开销比好处更糟糕

我想在 python 3.7 中使用 trie 搜索,以便将字符串与某些给定的单词匹配。trie 搜索算法实际上非常快,但是我也想使用我的 CPU 的所有内核。假设我的电脑有 8 个内核,我想使用其中的 7 个。因此,我将我的单词数据库拆分为 7 个同样大的列表,并创建了每个列表。(这是并行化代码的基本思想)

但是,当我从多处理模块调用 Process() 时,Process().start() 方法可能会在真实数据库上占用几秒钟的时间。(搜索本身大约需要一微秒)。

老实说,我还不是一个专业的程序员,这意味着我可能在代码中犯了一些重大错误。有人看到这个过程的开始如此缓慢的原因吗?

请考虑到我使用比下面的 trie 更大的数据库测试了脚本。我还测试了每次只调用 1 个进程的脚本,这也明显变慢了。我想提供更少的代码,但是我认为很高兴看到运行问题。如果需要,我还可以提供其他信息。

import string
import sys
import time

from multiprocessing import Process, Manager
from itertools import combinations_with_replacement


class TrieNode:

    def __init__(self):

        self.isString = False
        self.children = {}

    def insertString(self, word, root):
        currentNode = root
        for char in word:
            if char not in currentNode.children:
                currentNode.children[char] = TrieNode()
            currentNode = currentNode.children[char]
        currentNode.isString = True

    def findStrings(self, prefix, node, results): …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

5
推荐指数
2
解决办法
1855
查看次数

AmbigeousForeignKeysError:无法确定关系 User.posts 上父/子表之间的联接条件 - 多个外键路径

如何实现用户对帖子点赞功能?我遵循了其他在线用户发布的代码;但是,我收到以下错误:

AmbiguousForeignKeysError: 
Could not determine join condition between parent/child tables on relationship 
User.posts - there are multiple foreign key paths linking the tables.  Specify 
the 'foreign_keys' argument, providing a list of those columns which should be 
counted as containing
Run Code Online (Sandbox Code Playgroud)
class User(db.Model):
   id = db.Column(db.Integer, primary_key=True)
   username = db.Column(db.String(20), unique=True, nullable=False)
   email = db.Column(db.String(120), unique=True, nullable=False)
   image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
   password = db.Column(db.String(60), nullable=False) 
   posts = db.relationship('Post', backref='author', lazy=True)

   def __repr__(self):
       return "{}, {}, {}".format(self.username, self.email, self.image_file)

   liked = db.relationship( …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy

3
推荐指数
1
解决办法
3355
查看次数