如何使用pymysql将mySQL查询结果存储到pandas DataFrame中?

mso*_*rom 13 python mysql pandas pymysql

我正在尝试将mySQL查询结果存储在pandas DataFrame中,pymysql并且遇到构建数据帧的错误.在这里这里找到了类似的问题,但看起来有pymysql抛出特定的错误:

import pandas as pd
import datetime
import pymysql

# dummy values 
connection = pymysql.connect(user='username', password='password', databse='database_name', host='host')

start_date = datetime.datetime(2017,11,15)
end_date = datetime.datetime(2017,11,16)

try:
    with connection.cursor() as cursor:
    query = "SELECT * FROM orders WHERE date_time BETWEEN %s AND %s"

    cursor.execute(query, (start_date, end_date)) 

    df = pd.DataFrame(data=cursor.fetchall(), index = None, columns = cursor.keys())
finally:
    connection.close()
Run Code Online (Sandbox Code Playgroud)

收益: AttributeError: 'Cursor' object has no attribute 'keys'

如果我删除indexcolumns参数:

try:
    with connection.cursor() as cursor:
    query = "SELECT * FROM orders WHERE date_time BETWEEN %s AND %s"

    cursor.execute(query, (start_date, end_date)) 

    df = pd.DataFrame(cursor.fetchall())
finally:
    connection.close()
Run Code Online (Sandbox Code Playgroud)

回报 ValueError: DataFrame constructor not properly called!

提前致谢!

Max*_*axU 19

使用Pandas.read_sql():

query = "SELECT * FROM orders WHERE date_time BETWEEN ? AND ?"
df = pd.read_sql(query, connection,  params=(start_date, end_date))
Run Code Online (Sandbox Code Playgroud)

  • @Nodame,您可以首先使用 sqlalchemy 调用存储过程,然后使用 pd.read_sql 读取结果 (2认同)