cursor.execute
を使用してDjangoプロジェクトで生のSQLクエリを実行しています。ここでPostgreSQLでのDjango/PythonとRaw SQLのクエリ
は私のジャンゴmodels.py
データベーススキーマです:私は混乱してしまうのはここ
# \d+ client
Column | Type | Modifiers | Storage |
-------------------+--------------------------+--------------------+----------+
date_incorporated | timestamp with time zone | not null | plain |
だ:
私が使用している場合
class Client(models.Model):
date_incorporated = models.DateTimeField(default=timezone.now)
そして、ここでは、テーブルのpsql
説明がありますpsql
を使用してテーブルからデータをクエリすると、I ge t:
# SELECT date_incorporated FROM client;
date_incorporated
------------------------
2017-06-14 19:42:15-04
2017-11-02 19:42:33-04
(2 rows)
これは意味があります。 PostgreSQL docsでは、これは正しく書式設定され、UTCタイムスタンプとして格納されている文字列であることを示しています(確信しています)。私はこのクエリを使用してジャンゴを通過するとき
:
cursor.execute('SELECT date_incorporated FROM client;')
data = [dict(zip(columns,row)) for row in cursor.fetchall()]
(using the dictfetchall
method from the Django docs)
...私date_incorporated
フィールドはpythonのdatetime
対象になってます。私が構築しています。このアプリで
{'date_incorporated': datetime.datetime(2017, 11, 2, 23, 42, 33, tzinfo=<UTC>)}
、私は、入力生のSQLのことができるようにするために、ユーザーを望んでいた、とcursor.execute(rawSQL)
関数に入力された文字列を実行することを置きます。私は出力がpsql
バージョンと同じであることを期待しました。
私はDjangoのORMを使用していた場合、私は、タイムゾーンを意識datetime
オブジェクトに変換することがtimestamp with time zone
を期待してきたかもしれませんが、私は生のSQL呼び出しをやっているので、私は、2017-06-14 19:42:15-04
戻っていない取得するために期待しましたPython datetime
オブジェクトです。
fetchall
メソッドはまだDjango ORMとして動作し、特定のフィールドを変換していますか?
ありがとうございます。そして、カーソルはあなたが言っているすべてのインタフェースドライバで標準ですか?おそらく[PEP 249](https://www.python.org/dev/peps/pep-0249/)からですか? – qarthandso