2016-11-10 19 views
0

とdatatimeオブジェクトの問題私はSQLAlchemyのを使用していますが、SQLiteのエラーに発行WRT持っています: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オブジェクトに変換する方法は問いません。エラーを意味します。私は、すべてが十分に定義されているように見えるときにこのエラーが発生し続ける理由を正確にはわかりません。私はこのために、次のエラーSQLite DateTime type only accepts Python datetime and date objects as input.を得るevent_date属性に私のモデルでDateTimeを使用するときに、私はdate()方法なしvaldate = datetime.strptime('1776-01-01 00:00:00', "%Y-%m-%d %H:%M:%S")を定義することを

EDIT

注意を。予想通り、この場合のtype(valdate)<type 'datetime.datetime'>となります。

valdate変数を作成する際に、私のクラスのevent_date属性を使用するすべての組み合わせを試しました。

答えて

0

エラーは言う:

SQLite Date type only accepts Python date objects as input.

しかし、あなたはdateオブジェクトを持っていない - あなたはdatetimeオブジェクトを持っています! dateにあなたのdatetimeを有効にするには、ちょうどそのdate()メソッドを呼び出す - あなたのstrptimeフォーマットは時刻フィールド(%H:%M:%S)が含まれているという事実から判断するのに、あなたの代わりにColumn(DateTime)Column(Date)からevent_dateを変更したい場合があります。

+0

私はこれを以前に試みていて、同じエラーが発生しました。また、上記のように、私は '型(valdate) 'を行い、' 'を返しました。私には確かに' datetime'オブジェクトのように見えます。私はまた、私のクラスのデータ型を悩ませました。私は太陽の下で事実上すべての組み合わせを試みました。 –

+0

@horcle_buzz:あなたは私の答えの重要な部分を見逃したようです: 'datetime'と' date'は2つの異なるタイプです。 SQLAlchemyは 'date'を望んでいますが、' datetime'を与えています。 – jwodder

+0

上記の修正/編集された質問を参照してください。 –