如何将SQL查询结果读入Pandas DataFrame / Python / Django?

18

我在 views.py 中使用以下代码获取 app:

from django.db import connection

def test(request):

    cursor = connection.cursor()
    sql = """
    SELECT x , n
    from table1 limit 10
    """
    cursor.execute(sql)
    rows = cursor.fetchall()

    # df1 = pd.read_sql_query(sql,cursor)  <==> not working ) 
    # df1.columns = cursor.keys()    <==> not working ) 

    return render(request, 'app/test.html',{ "row" : rows,})

我可以打印行并获得类似以下内容的列表在 test.html

row((x1,yvalue1),(x2,yvalue2) , .... ))
但我想做的是获取所有已提取并放入数据框中的列名数据,希望使用类似下面的内容: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql_query.html#pandas.read_sql_query

1
我对Django一无所知,但我相信read_sql_query唯一可以使用的“本地”连接是针对SQLite的。您需要使用SQLAlchemy来处理其他所有数据库。 - Bob Haffner
2个回答

32

我认为aus_lacy的解决方案有些偏差 - 首先你需要将QuerySet转换成一个包含支持QuerySet的SQL的字符串。

from django.db import connection

query = str(ModelToRetrive.objects.all().query)
df = pandas.read_sql_query(query, connection)

还有一种内存效率较低但仍然有效的解决方案:

df = DataFrame(list(ModelToRetrive.objects.values('id','some_attribute_1','some_attribute_2'))) 

0

您需要使用Django内置的QuerySet API。有关它的更多信息可以在这里看到。创建QuerySet后,您可以使用pandas的read_sql_query方法构建数据框架。构建QuerySet的最简单方法是查询整个数据库,可以像这样完成:

db_query = YourModel.objects.all() 

当查询数据库时,您可以使用作为参数传递的过滤器来创建不同的QuerySet对象,以根据您的需求进行操作。

然后,使用pandas,您可以执行类似以下的操作:

d_frame = pandas.read_sql_query(db_query, other_args...)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接