我正在使用SQLAlchemy并且遇到SQLite错误的问题:
SQLite Date type only accepts Python date objects as input.
[SQL: 'SELECT anon_1.patient_sid AS sid FROM
(SELECT clinical_data.patient_sid AS patient_sid FROM clinical_data
WHERE clinical_data.event_date >= ?) AS anon_1']
我完全理解错误的含义,但我不明白为什么会发生错误。
我传递给clinical_data.event_date >= ?
上方查询中的日期比较的参数设置为:
valdate = datetime.strptime('1776-01-01 00:00:00', "%Y-%m-%d %H:%M:%S").date()
并且,我已验证valdate
的数据类型为<type 'datetime.date'>
用于构造查询的类是:
class ClinicalData(db.Model):
__tablename__ = 'clinical_data'
id = Column(Integer, primary_key=True, autoincrement=True)
patient_id = Column(Integer)
patient_sid = Column(Integer)
string_value = Column(String(255))
double_value = Column(Float)
data_type_id = Column(Integer)
event_date = Column(Date)
ontology_id = Column(Integer)
attribute_id = Column(Integer)
project_id = Column(Integer)
replaced_by_id = Column(Integer)
date_record_added = Column(DateTime)
parent = Column(Integer)
num_children = Column(Integer)
lft = Column(Integer)
rgt = Column(Integer)
SQLite的SQLAlchemy文档说明(参见SQLAlchemy SQLite documentation)“SQLAlchemy自己的DateTime和相关类型在使用SQlite时提供日期格式和解析功能......”
我不是问如何将我的字符串对象转换为python datetime对象,也不是在询问错误的含义。我不确定为什么当所有内容都被充分定义时,我仍然会收到此错误。
修改
请注意,当我在DateTime
属性的模型中使用event_date
时,我收到以下错误SQLite DateTime type only accepts Python datetime and date objects as input.
为此我定义了valdate = datetime.strptime('1776-01-01 00:00:00', "%Y-%m-%d %H:%M:%S")
而没有date()
方法。正如所料,type(valdate)
在这种情况下会产生<type 'datetime.datetime'>
。
我尝试了将变量valdate
与我班级的event_date
属性一起创建的每个组合。
答案 0 :(得分:0)
错误说:
SQLite日期类型仅接受Python日期对象作为输入。
但是你没有date
个对象 - 你有一个datetime
个对象!要将datetime
转换为date
,只需调用其date()
方法即可 - 尽管您的strptime
格式包含时间字段(%H:%M:%S
),您可能希望将event_date
从Column(Date)
更改为Column(DateTime)
。