2012-01-05 10 views
2

私は、sqlite3データベースからいくつかの簡単な値を表示する小さなDjangoアプリケーションを作成しています。私の問題は、フィールドの1つがDateTimeFieldであるにもかかわらず、クエリの際にそのフィールドのUnicode値を取得することです。ここでは、モデルの関連部分があります:私は、例えば、(当然の合計をインポートした後)DjangoのシェルでTotals.objects.all()[0].timeを入力した場合Django datetimeフィールド(sqliteデータベースを使用)はunicodeを返します

class Totals(models.Model): 
    time = models.DateTimeField(primary_key=True, blank=False) 
    .. 

は今、私はu'2012-01-03 04:02:56.966'を取得します。おそらく、私はsqliteを使用しているので、これは正常な動作ですか、それとも何か間違っていますか?私はこれが適切であるかどうかはわかりませんが、使用したいデータベースがすでにあるので、私はモデルを自動生成しました。自動生成プロシージャは自然にすべてのフィールド型をテキストとして控除していたので、私はそれに応じて修正しました。

+2

DjangoのDBのバックエンドは、にすべてを変換し、次のように私の場合は

は、私が見ることはありますunicodeとsqlite3は常にunicodeを返します(UTF8 internal i believe) – CppLearner

+0

しかし、整数フィールドは正しく変換されます。私は、sqliteはネイティブのdatetime型を持っていないという事実を認識していますが、Djangoは私のために整数を解析することができ、sqliteのドキュメントではsqlite関数が認識する標準の日付形式を推奨しているので、Djangoは、これらの値も。他の質問stackoverflow(例:これは:http://stackoverflow.com/questions/1181145/why-isnt-django-returning-a-datetime-field-from-the-database)私にその印象を与えた。 – Elektito

+2

何か間違っています.. djangoはdatetimeオブジェクトに値を強制するか、エラーを発生させるべきです。あなたのモデルは1.3に貼り付けられたときに動作します。うーん? –

答えて

2

sqliteを使用して、私はその動作(私はちょうどdatetime.datetimeオブジェクトを取得します)を得ていません。私はあなたが質問で提供したのとまったく同じ方法でモデルを定義しました。

私の推測では、モデルの自動生成時に問題があり、実際にはデータベースのスキーマと一致していないと思います。したがって、これらのモデルから生成されるスキーマが実際に一致することを確認することをお勧めします。

$ python manage.py sql <appname> 
... 
CREATE TABLE "<appname>_totals" (
"time" datetime NOT NULL PRIMARY KEY 
) 
; 


$ sqlite3 <database_filename> 
.schema <app_name>_totals 
CREATE TABLE "<app_name>_totals" (
"time" datetime NOT NULL PRIMARY KEY 
); 

注:私ものpython 2.7.2とDjangoでのUbuntu 11.10を使用しています1.3.0

+0

はい、それです。 sqliteデータベースの列がテキストとして宣言されました。実際、sqliteでカラムをdatetimeとして定義できるかどうかはわかりませんでした。とにかく、テーブルのスキーマを変更することで、今はすべてうまくいきます。 – Elektito

+0

これを投稿してくれてありがとう - これはまったく私もハングアップしていた。私の場合、SQLite Browserを使用してカラムタイプをdatetimeに設定できました.Djangoはそれに満足していました。 –

関連する問題