Ich mache eine Oracle-Webanwendung, aber ich habe es geschafft, Daten zur Bestätigung und Sicherung einfach auszugeben.
OS:Windows 8.1 Python:2.7.10 x64 Erforderliche Module: cx_Oracle, xlwt
output_oracle_to_excel.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os,sys
import csv
import codecs
import numbers
import unittest
import cStringIO
import itertools
import cx_Oracle
import xlwt
from itertools import chain
os.environ["NLS_LANG"] = "JAPANESE_JAPAN.AL32UTF8"
ORACLE_CONF = {
'ID' : 'SCHEMENAME'
, 'PASS' : 'SCHEMEPASSWORD'
, 'HOST' : '192.168.1.5'
, 'SID' : 'XE'
}
def fetchTables( table_name ):
output_file_name = 'DB_to_Excel_' + HOST + '_' + ID + '_' + table_name + '.xls'
wb = xlwt.Workbook() #Erstellen Sie eine neue Arbeitsmappe
ws = wb.add_sheet( table_name ) #Neues Arbeitsblatt erstellen
column_name_sql = 'select column_name from user_tab_columns where table_name = :tbl'
cur_columns = conn.cursor()
cur_columns.execute(column_name_sql, tbl=table_name)
columns = cur_columns.fetchall()
cur_columns.close()
columns = tuple(chain.from_iterable(columns))
data_sql = 'select * from "%s"' % table_name
cur_data = conn.cursor()
cur_data.execute(data_sql)
nRow = 0
nLine = 0
for value in columns:
ws.write(nRow, nLine, value)
nLine = nLine + 1
row = cur_data.fetchone()
nRow = 1
while row != None: #Wenn Sie die Daten haben
nLine = 0
for value in row: #Elementschleife abrufen
if isinstance( value , cx_Oracle.LOB ):
value = value.read()
ws.write(nRow, nLine, value) #Schreiben Sie in Excel
nLine = nLine + 1
nRow = nRow + 1
row = cur_data.fetchone() #Zum nächsten Datensatz
cur_data.close()
wb.save( output_file_name ) #Excel-Datei speichern
def fetchAllTables( conn ):
str_sql = "select TABLE_NAME from user_tables where TABLE_NAME LIKE '%USER%' or TABLE_NAME LIKE '%SHOP%' ORDER BY TABLE_NAME"
cur_tables = conn.cursor()
cur_tables.execute( str_sql )
rows = cur_tables.fetchall()
i = 0
lst_table = list()
for row in rows:
print row[0]
lst_table.append( row[0] )
fetchTables(lst_table[i])
i = i + 1
conn = cx_Oracle.connect( ORACLE_CONF['ID'] , ORACLE_CONF['PASS'] , ORACLE_CONF['HOST'] + '/' + ORACLE_CONF['SID'] )
fetchAllTables( conn )
os.environ["NLS_LANG"] = "JAPANESE_JAPAN.AL32UTF8" Es wird angegeben durch. In letzter Zeit hat die Anzahl von UTF-8 zugenommen, daher denke ich, dass UTF-8 so verwendet werden kann, wie es ist.
ORACLE_CONF = { 'ID' : 'SCHEMENAME' , 'PASS' : 'SCHEMEPASSWORD' , 'HOST' : '192.168.1.5' , 'SID' : 'XE' } Bitte ändern Sie dies entsprechend Ihrer Umgebung
def fetchTables( table_name ): output_file_name = 'DB_to_Excel_' + HOST + '' + ID + '' + table_name + '.xls'
Der Dateiname wird im Teil von generiert. Wenn die mit HOST: 192.168.1.5 und ID: SCHEMENAME erfasste Tabelle beispielsweise "TEST_USER" lautet, DB_to_Excel_192.168.1.5_SCHEMENAME_TEST_USER.xls Das Ausgabeergebnis wird in der Datei gespeichert.
def fetchAllTables( conn ): str_sql = "select TABLE_NAME from user_tables where TABLE_NAME LIKE '%USER%' or TABLE_NAME LIKE '%SHOP%' ORDER BY TABLE_NAME" Es ist möglich, wenn Sie die WHERE-Klausel von ändern.