小编hur*_*nko的帖子

SQLAlchemy:过滤多对多连接负载

我当前的表设置用于“单词”和“短语”之间的多对多关联:

association_table_wp = Table('words_phras', Base.metadata,
                             autoload=True,
                             extend_existing=True)

class Phrase(Base):
    __tablename__ = 'phrases'
    __table_args__ = {'autoload': True}

    def __init__(self, phrase, explanation=None, active=False):
        self.phrase = phrase
        self.explanation = explanation
        self.active = active

class Word(Base):
    __tablename__ = 'words'
    __table_args__ = {'autoload': True}

    def __init__(self, word, word_id=None, active=False):
        self.word = word
        self.word_id = word_id
        self.active = active

Word.phrases = relationship(Phrase,
                            secondary=association_table_wp,
                            backref="words")
Run Code Online (Sandbox Code Playgroud)

现在通常当我想查找一些单词及其短语时我使用:

words = db_session.query(Word).filter(Word.id.in_(word_ids)).\
             options(joinedload(Word.phrases)).\
             all()
Run Code Online (Sandbox Code Playgroud)

这允许我访问words[i].phrases与给定单词相关的短语。

现在,这工作正常,但请注意“active”属性。我想过滤单词的短语,以便只active == True返回带有 的短语。如何才能做到这一点?我尝试了几种连接和 eager_loading 的组合,但没有一个像我希望的那样工作。

非常感谢。

python many-to-many sqlalchemy filter

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

计算字符串中子字符串的所有非重叠出现次数

我想编写一个函数来计算字符串中子字符串的所有非重叠出现次数。这是我到目前为止:

def count(substr,theStr):
    count = 0
    for i in range(len(theStr)):
        if theStr[i:i+len(substr)] == substr:           
            count = count + 1
    return count
Run Code Online (Sandbox Code Playgroud)

如您所见,我的函数只计算字符串的出现次数,而不计算不重叠的出现次数。例如,输入“ana”和“Banana”将产生2,即使“Banana”中只有一个“ana”的非重叠实例。如何扩展我的功能以使其正常工作?

python

0
推荐指数
1
解决办法
83
查看次数

标签 统计

python ×2

filter ×1

many-to-many ×1

sqlalchemy ×1