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

How to read sql query to pandas dataframe / python / django

我在下面的 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) , .... ))

但我想要做的是获取所有数据及其列名,我获取并放入数据框,希望使用下面这样的东西:

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

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

db_query = YourModel.objects.all() 

您可以使用在查询数据库时作为参数传入的过滤器,根据您的需要创建不同的 QuerySet 对象。

然后使用 pandas 你可以这样做:

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

我认为 aus_lacy 在他的解决方案中有点偏离 - 首先你必须将 QuerySet 转换为包含支持 QuerySet[= 的 SQL 的字符串14=]

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')))