Python 基于另一个表的值从一个表中选择数据

Python 基于另一个表的值从一个表中选择数据,python,database,flask,sqlalchemy,flask-sqlalchemy,Python,Database,Flask,Sqlalchemy,Flask Sqlalchemy,主题表: id | account_id | name ------------------------- 8 | 112 | Biology id | subject_id | name ------------------------- 1 | 8 | Plants 主题表: id | account_id | name ------------------------- 8 | 112 | Biology id | subject_

主题表:

id | account_id | name
-------------------------
 8 |    112     | Biology
id | subject_id | name
-------------------------
 1 |     8      | Plants
主题表:

id | account_id | name
-------------------------
 8 |    112     | Biology
id | subject_id | name
-------------------------
 1 |     8      | Plants
使用Flask SQLAlchemy,我想根据
主题
表中
帐户id
的值,从
主题
表中选择一行

我有一个像这样的
帐户id
的列表:
用户=[139193112028,]
,我想选择这些用户的主题

我试过这个:

topicQuery = db.session.query(Topic).filter(Topic.Subject.has(Topic.Subject.accountID.in_(usersID))).all()
但收到一个错误
AttributeError:与主题关联的“InstrumentedAttribute”对象和“Comparator”对象都没有。主题具有属性“accountID”

我认为这是我如何定义我的
Models.py
文件的一个问题,它看起来是这样的:

class Subject(db.Model):

    __tablename__ = 'subjects'

    id = db.Column(db.Integer, primary_key=True)
    accountID = db.Column(db.Integer, db.ForeignKey('accounts.id'))
    name = db.Column(db.String(100))
    Topic = db.relationship('Topic', backref=backref('Subject', cascade='delete'))

    def __init__(self, accountID, name):
        self.accountID = accountID
        self.name = name


class Topic(db.Model):

    __tablename__ = 'topics'

    id = db.Column(db.Integer, primary_key=True)
    subjectID = db.Column(db.Integer, db.ForeignKey('subjects.id', onupdate='CASCADE', ondelete='CASCADE'))
    name = db.Column(db.String(150))

    def __init__(self, subjectID, name):
        self.subjectID = subjectID
        self.name = name

那么为什么我会出现这个错误,我该如何修复这个错误呢?谢谢。

或者删除额外的
主题。
主题.Subject.accountID.in.\u(usersID)

或者,执行一个简单的连接查询,这就足够了(可能更快):


或者从
Topic.Subject.accountID.in.\uux(usersID)
中删除额外的
主题。

或者,执行一个简单的连接查询,这就足够了(可能更快):

print(028)
在您的python版本中做什么?我假设它会产生一个错误。
print(028)
在您的python版本中做什么?我想它应该会产生一个错误。