我编写了以下程序来获取数据库的某些行,其中包含有关22-Jan-1963之后出生的用户的信息:

import datetime as dt
import peewee as pw
db = pw.SqliteDatabase('people.db')

class Person(pw.Model):
    name = pw.CharField()
    birthday = pw.DateField(formats=['%d-%b-%Y'])

    class Meta:
        database = db # This model uses the "people.db" database.

db.create_tables([Person])

bob = Person(name = 'Bob', birthday = '21-Jan-1960')
james = Person(name = 'James', birthday = '22-Jan-1965')
steve = Person(name = 'Steve', birthday = '20-Jan-1970')
alex = Person(name = 'Alex', birthday = '18-Jan-1975')
bob.save()
james.save()
steve.save()
alex.save()

for item in Person.select().where(Person.birthday > dt.date(1963,1,22)):
    print item.name,item.birthday, item.birthday > dt.date(1963,1,22)


但是,当我运行此命令时,输出不是我期望的(我期望输出中的James,Steve和Alex):

>>> ================================ RESTART ================================
>>>
Bob 1960-01-21 False
James 1965-01-22 True
Steve 1970-01-20 True
>>>


好吧,我在dt.date(1963,1,22)方法中将"22-Jan-1963"替换为where(),现在的结果是:

>>> ================================ RESTART ================================
>>>
James 1965-01-22 True
>>>


如您在上面看到的,它仍然是不正确的。

我该怎么办?

最佳答案

我绝对不了解PeeWee,但是鉴于Sqlite没有本地日期时间格式(它将其模拟为字符串),因此您可能想尝试将日期格式更改为"%Y-%m-%d"。它将自动正确地按字符串排序,然后可能适用于Sqlite。

关于python - 如何比较“peewee.DateField”和“datatime.date”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32346990/

10-12 20:58