【问题标题】:How to read sql query to pandas dataframe / python / django如何读取 sql 查询到 pandas 数据框/python/django
【发布时间】:2015-03-02 11:18:46
【问题描述】:

我在 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 一无所知,但我相信您可以与 read_sql_query 一起使用的唯一“本机”连接是用于 sql lite。您需要对所有其他人使用 sql alchemy。

标签: python mysql django


【解决方案1】:

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

db_query = YourModel.objects.all() 

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-17
      • 2021-11-22
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 2020-05-09
      • 2022-06-13
      相关资源
      最近更新 更多