SQLAlchemy的Python数据时对象问题

时间:2016-11-10 20:22:57

标签: python sqlite datetime sqlalchemy

我正在使用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属性一起创建的每个组合。

1 个答案:

答案 0 :(得分:0)

错误说:

  

SQLite日期类型仅接受Python日期对象作为输入。

但是你没有date个对象 - 你有一个datetime个对象!要将datetime转换为date,只需调用其date()方法即可 - 尽管您的strptime格式包含时间字段(%H:%M:%S),您可能希望将event_dateColumn(Date)更改为Column(DateTime)