Advertisement
Guest User

Untitled

a guest
Feb 25th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.11 KB | None | 0 0
  1. # !/usr/bin/env python3
  2. # @Version : 2019-02-22 16:10:17
  3. # @Author : Jiang Hui (jianghui@zigui.me)
  4. # @Link :
  5. # @Description : python读取Oracle数据库数据到Excel
  6.  
  7. import os
  8. import cx_Oracle
  9. import xlsxwriter
  10. import datetime
  11. from ora_settings import ORA_CONNECTION, ORA_USERNAME, ORA_PASSWORD, SQL
  12.  
  13. # 防止读取结果出现中文乱码(问号)情况
  14. os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
  15.  
  16.  
  17. def get_oracle(connection, username, password):
  18. """
  19. connection: 'IP:PORT/SID'
  20. type: str
  21. username:
  22. type: str
  23. password:
  24. type: str
  25. rtype: cx_Oracle.connection object
  26. """
  27. try:
  28. print(f"username: {username}\npassword: {password}\nconnection: {connection}")
  29. conn = cx_Oracle.connect(username, password, connection)
  30. return conn
  31. except cx_Oracle.Error as e:
  32. exit(e)
  33.  
  34.  
  35. def write_excel(filename, fields, contents):
  36. """
  37. filename: '20190101.xlsx'
  38. type: str
  39. fields:
  40. type: list
  41. contents:
  42. type: list
  43. """
  44. with xlsxwriter.Workbook(filename) as workbook:
  45. # 标题栏格式定义
  46. format_title = workbook.add_format({
  47. 'bold': True,
  48. 'align': 'center',
  49. 'valign': 'vcenter'
  50. })
  51. # 内容区格式定义
  52. format_content = workbook.add_format({
  53. 'align': 'center',
  54. 'valign': 'vcenter'
  55. })
  56.  
  57. # sheet1名称定义
  58. sheet = workbook.add_worksheet('sheet1')
  59.  
  60. # 标题栏冻结
  61. sheet.freeze_panes(1, 0)
  62.  
  63. # 标题栏
  64. for field in range(len(fields)):
  65. sheet.write(0, field, fields[field][0], format_title)
  66.  
  67. # 内容区
  68. for row in range(len(contents)):
  69. for col in range(len(fields)):
  70. ceil = contents[row][col]
  71. if ceil is not None:
  72. sheet.write(row + 1, col, str(ceil), format_content)
  73. print(f"已保存至{filename}")
  74.  
  75.  
  76. def main():
  77. print('-----------------start------------------')
  78. # 设置文件名称
  79. m_file = datetime.date.today().strftime('%Y%m%d') + '.xlsx'
  80.  
  81. # 获取数据库连接
  82. conn = get_oracle(ORA_CONNECTION, ORA_USERNAME, ORA_PASSWORD)
  83.  
  84. # 查询数据库
  85. with conn.cursor() as cursor:
  86. try:
  87. result = cursor.execute(SQL)
  88. print('---------------config-end---------------')
  89. print(result.statement)
  90. print('-----------------SQL-end----------------')
  91. xlsx_fields = cursor.description
  92. xlsx_contents = cursor.fetchall()
  93. except cx_Oracle.DatabaseError as e:
  94. conn.close()
  95. exit(e.args[0])
  96.  
  97. # 往Excel写数据
  98. write_excel(m_file, xlsx_fields, xlsx_contents)
  99.  
  100. print(f'共有{str(len(xlsx_contents))}行,{str(len(result.description))}列')
  101. print('-------------------end------------------')
  102. conn.close()
  103.  
  104.  
  105. if __name__ == '__main__':
  106. main()
  107.  
  108. # ora_settings.py
  109. # ----------------------------------------
  110. # ORA_CONNECTION = '127.0.0.1:1521/orcl'
  111. # ORA_USERNAME = 'user'
  112. # ORA_PASSWORD = 'password'
  113. #
  114. # SQL = 'select * from user_tables'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement