sqlalchemy: Wählen Sie diese Option aus der Liste der untergeordneten Spaltenwerte mit eingeschlossenen Inversen (nicht in) aus

Ich habe eine typische Post / Tags-Beziehung (viele Tags, die mit einem Post verknüpft sind) in flask-sqlalchemy, und ich möchte Posts auswählen, die in einer von mir bereitgestellten Liste nicht mit Tags versehen sind. Zuerst die Modelle, die ich eingerichtet habe:

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    tags = db.relationship('Tag', lazy='dynamic')

class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Text(50))
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'))

So etwas wie

db.session.query(Post).filter(Post.tags.name.notin_(['dont','want','these']))

scheitert mit

AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Post.tags has an attribute 'name'

Ich gehe davon aus, dass Tags eine Beziehung und keine Spalte sind. Ich hatte dieses Arbeiten an einem anderen Projekt, als ich das tatsächliche SQL manuell schrieb. Dies war die SQL, die funktionierte:

SELECT * FROM $posts WHERE id NOT IN (SELECT post_id FROM $tags WHERE name IN ('dont','want','these'))

Wie würde ich das mit der sqlalchemy API erreichen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage