如何将sql查询读取到pandas dataframe/python/djang

2024-06-14 11:09:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用下面的views.py获取应用程序

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) , .... ))

但我要做的是获取所有列名为的数据,并将其放入dataframe中,希望能使用如下方法:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql_query.html#pandas.read_sql_query


Tags: fromtestpandasreadsqlrequesthtmlnot
2条回答

您需要使用Django内置的QuerySet API。关于它的更多信息可以看到here。一旦创建了QuerySet,就可以使用pandasread_sql_query方法来构造数据帧。构造QuerySet的最简单方法是简单地查询整个数据库,可以这样做:

db_query = YourModel.objects.all() 

您可以使用在查询数据库时作为参数传入的筛选器来创建不同的QuerySet对象,具体取决于您的需要。

然后使用熊猫,你可以做如下事情:

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

我认为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'))) 

相关问题 更多 >