Python psycopg2返回错误的(?)日期\部件函数类型
我有一个Django应用程序,它使用基于Django聚合查询集的Google可视化API(Google图表)生成一些图形。GoogleCharts API希望数据的格式正确,以正确绘制并生成图形(即日期必须是javascript类型的日期,而不是整数或浮点) 假设我想为我的模型帖子创建一个聚合,以显示特定用户每年的记录总数。我的代码如下所示:Python psycopg2返回错误的(?)日期\部件函数类型,python,django,psycopg2,Python,Django,Psycopg2,我有一个Django应用程序,它使用基于Django聚合查询集的Google可视化API(Google图表)生成一些图形。GoogleCharts API希望数据的格式正确,以正确绘制并生成图形(即日期必须是javascript类型的日期,而不是整数或浮点) 假设我想为我的模型帖子创建一个聚合,以显示特定用户每年的记录总数。我的代码如下所示: qset = Post.objects.filter(user__id=1).extra(select={"year": "date_part('year
qset = Post.objects.filter(user__id=1).extra(select={"year": "date_part('year', cdt)"}\
.values("year").annotate(num_records=Count("id")).order_by()
这项工作非常好,除了用于从timestampz字段提取年份的date\u part()
从psql运行类似的查询将返回一个整数,这正是我所期望的
select date_part('year', cdt) from public.core_post where id=6543;
date_part
-----------
2011
(1 row)
同样,使用psycopg2库运行一个小型python程序会给我带来同样的问题:
import psycopg2
def main():
conn_string = "host='localhost' dbname='mydb' user='username' password='secret'"
conn = psycopg2.connect(conn_string)
cursor = conn.cursor()
sql = "select date_part('year', cdt) from public.core_post where id=6543;"
cursor.execute(sql)
for rec in cursor.fetchone():
print type(rec), rec
if __name__ == '__main__':
main()
<type 'float'> 2011.0
[Finished in 0.1s]
导入psycopg2
def main():
conn_string=“host='localhost'dbname='mydb'user='username'password='secret'”
conn=psycopg2.connect(连接字符串)
游标=连接游标()
sql=“从public.core_post(其中id=6543)中选择日期部分('year',cdt;”
cursor.execute(sql)
对于cursor.fetchone()中的rec:
打印类型(rec),rec
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
2011
[在0.1s内完成]
有人知道原因吗,或者可以修复吗
(在将数据传递到图形库之前,我当然可以编写一个函数来解决这个问题,但我更希望能够传递查询集(因为这就是我编写图形库的方式)。好吧,很尴尬。
只需重新阅读有关date_部分的PostgreSQL文档,其中明确指出:
Function Return Type
date_part(text, interval) double precision
我接受这个答案,留作将来参考
通过将date\u part()
的结果强制转换为int来解决
qset = Post.objects.filter(user__id=1).extra(
select={"year": "date_part('year', cdt)::int"}) \
.values("year").annotate(num_records=Count("id")).order_by()