如何读取 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) , .... ))
但我想要做的是获取所有数据及其列名,我获取并放入数据框,希望使用下面这样的东西:
您需要使用 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')))
我在下面的 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) , .... ))
但我想要做的是获取所有数据及其列名,我获取并放入数据框,希望使用下面这样的东西:
您需要使用 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')))