查询之间的烧瓶SQLAlchemy返回空列表

时间:2019-10-21 15:29:00

标签: python flask sqlalchemy

我刚刚开始使用Flask SQLAlchemy,我在这里查看了如何进行查询,因此我发现this

但是我遇到的问题是,当执行以下命令时,它将返回以下内容:

SELECT records.id AS records_id, records.created_at AS records_created_at, records.file_type AS records_file_type, records.path_filename AS records_path_filename 
FROM records 
WHERE records.created_at BETWEEN ? AND ?

代码:

today_date = datetime.today().strftime("%d/%m/%Y")
week = (datetime.today() - timedelta(days=7)).strftime("%d/%m/%Y")
month = (datetime.today() - timedelta(days=30)).strftime("%d/%m/%Y")

last_30_days = db.session.query(Records).filter(Records.created_at.between(month, today_date))

当我在last_30_days表达式的末尾添加.all()时,它将返回一个空列表。

我还要提及的是,当我使用相同的表达式查询星期时,today_date会获取所有结果。

这是表格的样子:

class Records(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    created_at = (db.Column(db.String(20), nullable=False))
    file_type = (db.Column(db.String(100), nullable=False))
    path_filename = db.Column(db.String(120), unique=True, nullable=False)

有人可以向我解释发生了什么吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您的示例未使用SQLAlchemy随附的DateDateTime列数据类型。您依赖于字符串的词典编排顺序,但是要使其正常工作,日期/时间戳需要按照ISO 8601的要求进行存储,例如YYYY-MM-DD

要么更改您正在使用的字符串格式,要么选择适当的列类型,而不只是String