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 17:09:19 浏览: 93
这是一个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脚本,先由用户输入查询日期,然后连接oracle服务器,查询语句为 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('2023/05/17 06:58:28', 'yyyy-mm-dd hh24:mi:ss') and to_date('2023/05/17 23:58:28', '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('2023/05/17 06:58:28', 'yyyy-mm-dd hh24:mi:ss') and to_date('2023/05/17 23:58:28', 'yyyy-mm-dd hh24:mi:ss');,把其中的日期改为用户输入的查询日期,查询后将结果保存在脚本所在目录的“查询日期”+WMS出库记录.xlsx表格中
好的,以下是Python脚本代码:
```python
import cx_Oracle
import pandas as pd
import datetime
# 用户输入查询日期
search_date = input("请输入查询日期(格式为yyyy-mm-dd):")
# 连接Oracle服务器
dsn = cx_Oracle.makedsn("服务器地址", "端口号", "服务名")
conn = cx_Oracle.connect("用户名", "密码", 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} 文件中。")
```
请将代码中的“服务器地址”、“端口号”、“服务名”、“用户名”和“密码”替换为实际的数据库连接信息。另外,由于我无法连接到您的Oracle服务器,所以无法进行测试,如果出现任何问题,请及时联系我。
阅读全文