2016-11-10 61 views
0

我使用SQLAlchemy的和我有一個問題WRT到一個SQLite錯誤DATATIME對象問題:用Python的SQLAlchemy

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對象,也不問我是什麼錯誤的意思。我不確定爲什麼當一切似乎已經被充分定義時,我一直都會收到這個錯誤。

編輯

需要注意的是,當我在我的模型上event_date屬性我收到以下錯誤SQLite DateTime type only accepts Python datetime and date objects as input.對於這種使用DateTime我定義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

錯誤說:

SQLite Date type only accepts Python date objects as input.

但是你沒有date對象 - 你有一個datetime對象!把你的datetimedate,只需調用其date()方法 - 儘管的事實,你strptime格式包括時間字段(%H:%M:%S)判斷,你可能希望從Column(Date)改變event_dateColumn(DateTime)代替。

+0

我曾經嘗試過,並得到相同的錯誤。另外,如上所述,我做了一個'type(valdate)',它返回了'',這對我來說當然看起來和聞起來就像是一個'datetime'對象。我還在我的課堂中使用了數據類型。我嘗試了幾乎所有的陽光下的組合。 –

+0

@horcle_buzz:你似乎錯過了我的答案的重要部分:'datetime'和'date'是兩種不同的類型。 SQLAlchemy想要一個'date',但是你給它一個'datetime'。 – jwodder

+0

查看上面更正/編輯的問題以作進一步說明。 –