私は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
を使用する必要があるということです
クール、それは動作し、さらに参考にしていただきありがとうございます。 – jetorz
@jetorz cheers;) –