1 import sqlite3 as sqlite 2 from xlwt import * 3 import sys 4 5 def sqlite_get_col_names(cur, select_sql): 6 cur.execute(select_sql) 7 return [tuple[0] for tuple in cur.description] 8 9 def query_by_sql(cur, select_sql): 10 cur.execute(select_sql) 11 return cur.fetchall() 12 13 def sqlite_to_workbook_with_head(cur, table, select_sql, workbook): 14 ws = workbook.add_sheet(table) 15 print('create table %s.' % table) 16 #enumerate针对一个可迭代对象,生成的是序号加上内容 17 18 for colx, heading in enumerate(sqlite_get_col_names(cur, select_sql)): 19 ws.write(0, colx, heading) #在第1行的colx列写上头部信息 20 21 for rowy, row in enumerate(query_by_sql(cur, select_sql)): 22 for colx, text in enumerate(row): #row是一行的内容 23 ws.write(rowy + 1, colx, text) #在rowy+1行,colx写入数据库内容text 24 25 def sqlite_to_workbook_without_head(cur, table, select_sql, workbook): 26 ws = workbook.add_sheet(table) 27 28 for rowy, row in enumerate(query_by_sql(cur, select_sql)): 29 for colx, text in enumerate(row): #row是一行的内容 30 ws.write(rowy, colx, text) #在rowy行,colx写入数据库内容text 31 32 def dump_db_to_excel(cur, workbook): 33 for tbl_name in [row[0] for row in query_by_sql(cur, "select tbl_name FROM sqlite_master where type = 'table'")]: 34 select_sql = "select * from '%s'" % tbl_name 35 sqlite_to_workbook_with_head(cur, tbl_name, select_sql, workbook) 36 37 def main(dbpath): 38 xlspath = dbpath[:dbpath.rfind('.')] + '.xls' 39 print("<%s> --> <%s>" % (dbpath, xlspath)) 40 41 db = sqlite.connect(dbpath) 42 cur = db.cursor() 43 w = Workbook() 44 45 dump_db_to_excel(cur, w) #把所有的db中的表数据导出到excel中,每个table对应一个sheet页 46 47 #按照条件查询数据并导出到excel中 48 #sheet_name = '测试' 49 #query_data_sql = "select 100-id as used from cpu_info where cpu_name = '%Cpu0'" 50 #sqlite_to_workbook_without_head(cur, sheet_name, query_data_sql, w) 51 52 cur.close() 53 db.close() 54 55 w.save(xlspath) 56 57 if __name__ == "__main__": 58 # arg == database path 59 main(sys.argv[1])