为什么我的SQLAlchemy query.flter仅适用于某些属性?

时间:2017-05-08 00:57:42

标签: python sqlalchemy

我正在学习Python的SQLAlchemy。

以下是我正在使用的示例。

首先我生成的数据文件包含如下的小狗信息:

ELEMENTS

现在我想过滤一些类型的小狗,如下所示:

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通过了,我可以得到Lucy,但是dateofBirth不能通过,每次我想得到这些小狗,我只是得到一个错误

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)

我真的无法理解,为什么我的过滤器只能在某些属性上操作,哪里出错?

0 个答案:

没有答案