Django/Python和使用PostgreSQL的原始SQL查询
我正在Django项目中使用Django/Python和使用PostgreSQL的原始SQL查询,python,django,postgresql,datetime,Python,Django,Postgresql,Datetime,我正在Django项目中使用cursor.execute执行原始SQL查询 这是我的Djangomodels.py数据库模式: class Client(models.Model): date_incorporated = models.DateTimeField(default=timezone.now) 下面是该表的psql说明: # \d+ client Column | Type | Modifiers
cursor.execute执行原始SQL查询
这是我的Djangomodels.py
数据库模式:
class Client(models.Model):
date_incorporated = models.DateTimeField(default=timezone.now)
下面是该表的psql
说明:
# \d+ client
Column | Type | Modifiers | Storage |
-------------------+--------------------------+--------------------+----------+
date_incorporated | timestamp with time zone | not null | plain |
这是我感到困惑的地方:
如果我使用psql
从表中查询数据,我会得到:
# SELECT date_incorporated FROM client;
date_incorporated
------------------------
2017-06-14 19:42:15-04
2017-11-02 19:42:33-04
(2 rows)
这对我来说很有意义。在中,它显示(我相信)这只是一个正确格式化并存储为UTC时间戳的字符串
当我使用此查询浏览Django时:
cursor.execute('SELECT date_incorporated FROM client;')
data = [dict(zip(columns,row)) for row in cursor.fetchall()]
()
…mydate\u incorporated
字段被转换为pythondatetime
对象
{'date_incorporated': datetime.datetime(2017, 11, 2, 23, 42, 33, tzinfo=<UTC>)}
{'date\u incorporated':datetime.datetime(2017,11,2,23,42,33,tzinfo=)}
在我正在构建的这个应用程序中,我希望用户能够输入原始SQL,并将输入的字符串放入要执行的cursor.execute(rawSQL)
函数中。我希望输出与psql
版本相同
如果我使用的是Django ORM,我可能会期望带时区的时间戳
被转换为一个时区感知的datetime
对象,但是由于我正在执行一个原始SQL调用,我希望返回2017-06-14 19:42:15-04
对象,而不是pythondatetime
对象
{'date_incorporated': datetime.datetime(2017, 11, 2, 23, 42, 33, tzinfo=<UTC>)}
fetchall
方法是否仍然充当Django ORM并转换某些字段?我相信这是使用任何接口驱动程序的标准转换。
即使使用py postgressql,也会得到相同的结果,即光标根据数据库中定义的字段类型进行转换
长话短说,dictfetchall并没有进行任何转换,而是从游标解析转换后的结果。谢谢。光标是所有接口驱动程序的标准配置?很可能是从哪里来的?