import cx_Oracle import pandas as pd import openpyxl #连接数据库 conn = cx_Oracle.connect('資料數據庫') sql="SELECT * FROM (SELECT * FROM ( SELECT NVL(E.locdesc,'') LOCATION,D.LINE,COUNT(*) QTY FROM REPAIR@CQABNB02 A,MO_D B,ISN C,MO_RUTE D,location E WHERE E.CODE=A.PLACE AND A.ISN=B.ISN AND B.ISN=C.ISN AND C.ISN=D.ISN AND D.SQ1=1 AND D.LIE IN('BN01B','BN02','BN09','BN10','BN11','BN12','BN13''BN14''BN15''BN16') AND A.RTIME BETWEEN TO_DATE('20210910200000','YYYYMMDDHH24MISS')AND TO_DATE('20210911070059','YYYYMMDDHH24MISS') GROUP BY ROLLUP(A.PLACE,D.LINE,E.locdesc)) PIVOT (SUM(QTY) FOR LINE IN ('BN01B','BN02','BN09','BN10','BN11','BN12','BN13''BN14''BN15''BN16'))) ORDER BY LOCATION" data=pd.read_sql(sql,conn) writer=pd.ExcelWriter('20210910.xlsx') #filename为导excel的路径 data.to_excel(writer,'sheet',index=False) writer.save() conn.close()
时间: 2023-09-13 16:09:19 浏览: 85
这是一个Python脚本,用于连接Oracle数据库,查询指定的数据,并将查询结果导出到Excel文件中。脚本中使用了cx_Oracle、pandas和openpyxl等Python库。其中,cx_Oracle库用于连接Oracle数据库,pandas库用于处理数据,openpyxl库用于导出Excel文件。你提供的脚本中查询的是某个时间段内,指定生产线和位置的维修数量统计结果,并按位置进行了排序。
相关问题
帮我检查一下python代码中的错误import cx_Oracle import pandas as pd import datetime # 用户输入查询日期 search_date = input("请输入查询日期(格式为yyyy-mm-dd):") # 连接Oracle服务器 dsn = cx_Oracle.makedsn(host='10.12.191.22', port='1521', sid='nti') conn = cx_Oracle.connect(user='cwms', password='Nti56com', dsn=dsn) # 构建查询语句 sql = f"""select * from ( select * from WMS_B_SN_H t left join WMS_B_TASK_HIS q on t.container_id = q.container_id where (q.ref_doc_type = 'DocType_Replenish' or q.ref_doc_type = 'DocType_Retrieval') and q.create_date between to_date('{search_date} 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and to_date('{search_date} 23:59:59', 'yyyy-mm-dd hh24:mi:ss') union select * from Wms_b_Sn_h_His t left join WMS_B_TASK_HIS q on t.container_id = q.container_id where (q.ref_doc_type = 'DocType_Replenish' or q.ref_doc_type = 'DocType_Retrieval') and q.create_date between to_date('{search_date} 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and to_date('{search_date} 23:59:59', 'yyyy-mm-dd hh24:mi:ss') )""" # 查询数据 df = pd.read_sql_query(sql, conn) # 关闭数据库连接 conn.close() # 保存查询结果 filename = f"{search_date} WMS出库记录.xlsx" df.to_excel(filename, index=False) print(f"查询结果已保存在当前目录下的 {filename} 文件中。"){\rtf1}
这段代码没有明显的语法错误,但是需要注意以下几点:
1. 请确保cx_Oracle和pandas库已经安装好了。
2. 在连接Oracle服务器时,需要保证host、port和sid的值是正确的。
3. 在构建查询语句时,需要确保查询的表名和列名是正确的。
4. 在保存查询结果时,需要指定正确的文件名和文件格式。
如果以上几点都已经确认无误,那么这段代码应该可以正常运行。
python 数据库 报表_使用python生成oracle数据报表
使用Python可以轻松地从Oracle数据库中读取数据并生成报表。以下是一些常用的Python库和步骤:
1. 安装必要的Python库:cx_Oracle、pandas、openpyxl等。
2. 连接到Oracle数据库,可以使用cx_Oracle库连接到Oracle数据库。
3. 通过SQL查询从Oracle数据库中获取数据,使用pandas库可以将查询结果转换为DataFrame对象。
4. 使用openpyxl等库将数据写入Excel文件中。
以下是一个示例代码,用于从Oracle数据库中获取数据并将其写入Excel文件中:
```python
import cx_Oracle
import pandas as pd
from openpyxl import Workbook
# 连接Oracle数据库
conn = cx_Oracle.connect('username/password@host:port/service_name')
# SQL查询语句
sql = 'SELECT * FROM table_name'
# 获取查询结果并转换为DataFrame对象
df = pd.read_sql(sql, conn)
# 创建Excel文件
wb = Workbook()
# 选择第一个工作表
ws = wb.active
# 将DataFrame对象写入Excel文件中
for r in dataframe_to_rows(df, index=False, header=True):
ws.append(r)
# 保存Excel文件
wb.save('report.xlsx')
# 关闭数据库连接
conn.close()
```
以上代码中,需要替换的部分包括:
- `username`和`password`:Oracle数据库的用户名和密码
- `host`:Oracle数据库的主机名或IP地址
- `port`:Oracle数据库的端口号
- `service_name`:Oracle数据库的服务名称
- `table_name`:需要查询的表名
- `report.xlsx`:生成的Excel文件名
当然,如果你需要生成其他格式的报表,可以使用不同的Python库来实现。例如,使用matplotlib库可以生成图表,使用reportlab库可以生成PDF报表等。
阅读全文