<p>您可以使用<a href="https://docs.python.org/2/library/sqlite3.html#sqlite3.Connection.create_function" rel="nofollow">sqlite3.Connection.create_function</a>指定您自己的sqlite函数,该函数将日期转换为可以按字典顺序排序的内容:</p>
<pre><code>import datetime as dt
import peewee as pw
# custom sqlite function to reformat our date string
def _sqlite_reformat_date(unfortunate_date_string):
return dt.datetime \
.strptime(unfortunate_date_string,'%m/%d/%Y') \
.strftime('%Y-%m-%d')
# Subclass pw.SqliteDatabase to add our custom sqlite function
class MySqliteDatabase(pw.SqliteDatabase):
def __init__(self, *args, **kwargs):
super(MySqliteDatabase, self).__init__(*args, **kwargs)
def _add_conn_hooks(self, conn):
conn.create_function('reformat_date', 1, _sqlite_reformat_date)
super(MySqliteDatabase, self)._add_conn_hooks(conn)
db = MySqliteDatabase('people1.db')
# ...
# Your model definition and data inserts from your example above
# ...
rd = pw.fn.reformat_date # Use our custom sqlite function
for item in Person.select().where(rd(Person.birthday) > rd(base.birthday)):
print item.name , item.birthday
</code></pre>
<p>尽管这种方法将“只获取所需的行”,但它仍然会对每一行运行这个python函数!这比在python中进行日期比较时只获取所有行要好得多,甚至可能更慢!在</p>
<p>但是,<code>_sqlite_reformat_date</code>函数可以重构得更快,并且很高兴知道在sqlite中添加自定义函数有多容易。在</p>