python - 使用 cursor.fetchall() 返回空数据框
问题描述
我有一个可能返回空或非空记录的 SQL 查询。我需要在 Python 中执行这个查询:
import os
import pandas as pd
import pymysql
from pandas import ExcelWriter
from sqlalchemy import create_engine
connection = pymysql.connect(host='localhost',
user='root',
password='root',
db='device_db',
cursorclass=pymysql.cursors.DictCursor)
cur3=connection.cursor()
cur3.execute('SELECT outgoing_db.Customer_No, sum(SUM_IC_CALLS) AS SumOfSUM_IC_CALLS, sum(SUM_AIC_DURATION_C1) AS SumOfSUM_AIC_DURATION_C1, sum(SUM_AIC_AMOUNT_C1) AS SumOfSUM_AIC_AMOUNT_C1, outgoing_db.Rate, outgoing_db.Customer_Name FROM outgoing_db WHERE (((outgoing_db.User_ID) != ("IND")) AND ((outgoing_db.Incoming_ID)="Airtel") AND ((outgoing_db.Customer_Type)="Check") AND ((outgoing_db.Current_Operation)="NO") AND ((outgoing_db.Active)="NO")) GROUP BY outgoing_db.Customer_No, outgoing_db.Rate, outgoing_db.Customer_Name HAVING (((outgoing_db.Customer_No) In (33165,33197)));')
mydf3=pd.DataFrame(cur3.fetchall())
print(mydf3)
它给了我一个例外:
Traceback (most recent call last):
File "C:\wamp64\www\DevicePortal\Query.py", line 16, in <module>
mydf3=pd.DataFrame(cur3.fetchall())
File "C:\Users\Sonal\AppData\Local\Programs\Python\Python36\lib\site-packages\pandas\core\frame.py", line 404, in __init__
raise ValueError('DataFrame constructor not properly called!')
ValueError: DataFrame constructor not properly called!
当我在做cur3.fetchone()它给了我一个输出:
Empty DataFrame
Columns: []
Index: []
但未来可能会添加数据(大约 100 万)。是否有使用cur3.fetchall()返回空数据帧的解决方案
解决方案
fetchall()
返回一个元组列表;如果你想从它们构建一个数据框,你可以使用pandas.DataFrame.from_records()
一种更简单的方法是直接从 SQL 读取数据:
pandas.read_sql()
它有一个chunksize
参数,如果您的数据集太大,您可以分块加载数据。
在这里阅读:
https://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.from_records.html https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql .html
推荐阅读
- python - 如何删除应用程序选项卡周围的白线?
- python - (ddd mm.m)的手动输入转换为弧度或十进制度?在蟒蛇
- android - 当我尝试解析布局时,我得到 android.content.res.Resources$NotFoundException: Resource ID #0x0
- python - 在 Tensorflow 2 中使用 NON-TFRecord 协议缓冲区
- angular - 如何在动态显示列单元格值的情况下有条件地更改 mat-cell 行的内容
- pandas - 创建“指数平滑”变量 - Pandas
- debugging - 在本地机器上调试驱动程序
- c# - C# Winforms 具有单独自动滚动的多个面板
- javascript - 如何调用 Javascript 到 c#
- azure-data-factory - 如何过滤我的源数据集以仅将特定值复制到我的接收器?