1
Modell zu vergleichen:Filterungseigenschaften von Ursache Fehler
class Thing(db.Model):
__tablename__ = 'things'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128))
type_id = db.Column(db.Integer, db.ForeignKey('types_of_things.id'))
class TypeOfThing(db.Model):
__tablename__ = 'types_of_things'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
number = db.Column(db.Integer)
things = db.relationship('Thing', backref='type', lazy='dynamic')
Versuchen:
Thing.query.join(TypeOfThing).filter_by(Thing.type.number<=1).first()
Ursache:
AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Thing.type has an attribute 'number'
Versuchen:
Thing.query.join(TypeOfThing).filter_by(number<=1).first()
Ursache:
NameError: name 'number' is not defined
Der Grund, warum Sie nicht 'Zahl <= 1 'in' filter_by' verwenden können, ist, dass es für die Keyword-Argumente der Regel sucht mit das '=' Zeichen, keine Vergleiche. Sie können 'TypeOfThing.number' verwenden, um den Vergleich als Positionsargument zu übergeben. ('Nummer' darf nicht alleine verwendet werden, da sie nicht definiert ist.) – 2Cubed
@ 2Cubed Ich kann keine Nummer verwenden, weil sie nicht definiert ist, aber warum 'Thing.type.number'-Vergleich einen Fehler verursacht? Außerdem scheint es so zu sein: 'Thing.query.join (TypeOfThing) .filter_by (assembly = 1)' (ohne Vergleich) - 'assembled' ist noch nicht definiert. Ich akzeptiere deine Antwort mit ein bisschen Erklärung. – aryndin
@ 2Cubed, oh, ich dachte 'filter_by' ist ein Alias für' filter' :-) – aryndin