2017-05-08 7 views
1

私はPythonのSQLAlchemyを学んでいます。私のSQLAlchemy query.flterは、一部の属性でのみ動作するのはなぜですか?

以下は私が使用している例です。

まず私は、データ・ファイルは、以下のような子犬情報が含まれて生成する:

class Puppy(Base): 
    __tablename__ = 'puppy' 
    id = Column(Integer, primary_key=True) 
    name = Column(String(250), nullable=False) 
    gender = Column(String(6), nullable = False) 
    dateOfBirth = Column(Date) 
    shelter_id = Column(Integer, ForeignKey('shelter.id')) 
    weight = Column(Numeric(10)) 


male_names = ["Bailey", "Max", ...just some names..., "Luke", "Henry"] 

female_names = ['Bella', 'Lucy', ...just some names..., 'Honey', 'Dakota'] 

def CreateRandomAge(): 
    today = datetime.today() 
    days_old = randint(0,540) 
    birthday = today - timedelta(days = days_old) 
    return birthday 

def CreateRandomWeight(): 
    return random.uniform(1.0, 40.0) 

for i,x in enumerate(male_names): 
    new_puppy = Puppy(name = x, gender = "male", dateOfBirth = CreateRandomAge(), weight= CreateRandomWeight()) 
    session.add(new_puppy) 
    session.commit() 

for i,x in enumerate(female_names): 
    new_puppy = Puppy(name = x, gender = "female", dateOfBirth = CreateRandomAge(), weight= CreateRandomWeight()) 
    session.add(new_puppy) 
    session.commit() 

今、私は以下のように子犬のいくつかの種類をフィルタリングする:testpuppyが渡されたので

testpuppy = session.query(Puppy).filter_by(name='Lucy') 
print(testpuppy) 

birthdate = datetime.today() - timedelta(days=180) 
smallpuppy = session.query(Puppy).filter_by(dateOfBirth < birthdate) 
print(smallpuppy) 

は、その後、それは、奇妙です私はルーシーを手に入れることができますが、誕生日は過ぎ去ることはできません。これらの小さなパックを手に入れようとする度に、エラーが発生します。

NameError: name 'dateOfBirth' is not defined 

本当にわかりません、私のフィルタは何らかの属性でしか操作できないのですが、どこが間違っていますか?問題は、あなたがこのようfilterの代わりfilter_byを使用する必要があるということです

答えて

0

filterについては

smallpuppy = session.query(Puppy).filter(Puppy.dateOfBirth < birthdate) 

、基準が列にアクセスするためにClassName.propertyNameを使用する必要があり、あなたは<>を使用することができます。

filter_byの場合は、propertyNameを直接使用して列にアクセスできますが、<または>は使用できません。

this answerを参照してください。これは、filterfilter_byの違いについて詳しく説明します。

+0

クール、それは動作し、さらに参考にしていただきありがとうございます。 – jetorz

+0

@jetorz cheers;) –

関連する問題