Konvertovanje SQL tabele u Excell fajl [ Python ]

Baby Yoda ♥

Contributor
Poruka
18.260
Napisao sam ovu skriptu pre dva meseca i nalazi se na git-u (logično). Za rad vam treba openpyxl. Samo roknete:
Python:
pip install openpyxl

U principu, odaberete neku tabelu iz baze (u kodu morate reći koju) i pokrenete skriptu. Nije rađen GUI za ovu skriptu, ali imam i sa interfejsom.

Python:
'''
    Author: Aleksandar Arsic
    Contact email: srpskaitucionica@gmail.com
    Github: https://github.com/SrpskaITucionica
'''


from openpyxl import Workbook
import sqlite3

'''
    This part of code converts SQL table into Excel file.
    Database name, table name and excel file name are generic.
    DB should be in the same folder as main.py module, or any module that runs this code
'''

###################### WORKING WITH SQL PART ######################

con = sqlite3.connect('database_name.db')
cursor = con.cursor()

get_data_from_table_sql = "SELECT * FROM table_name"
cursor.execute(get_data_from_table_sql)
# GET TABLE DATA
rows = cursor.fetchall()

# GET COLUMN NAMES
cursor2 = con.execute('SELECT * FROM table_name')
names = list(map(lambda x: x[0], cursor.description))

###################### WORKING WITH EXCEL PART ######################

wb = Workbook()
ws = wb.active
ws.title = 'Worksheet name'

ws.append(names)
for row in rows:
    ws.append(list(row))

wb.save('excel_file_name.xlsx')
 

bmaxa

Buduća legenda
Poruka
25.938
Evo ga moj davni program da se iz fajlova prebaci u xlsx, sa sve C vraperom (xlsxwriter) u Rustu :
Kod:
use std::ffi::{CString, CStr};
#[repr(C)]
struct lxw_workbook(*mut lxw_workbook);
#[repr(C)]
struct lxw_worksheet(*mut lxw_worksheet);
#[repr(C)]
#[derive(Clone)]
struct lxw_format(*mut lxw_format);
#[link(name="xlsxwriter",kind="dylib")]
extern "C" {
    fn workbook_new(wkbk: *const i8)->*mut lxw_workbook;
    fn workbook_add_worksheet(wkbk:*mut lxw_workbook, sheetname:*const i8)->*mut lxw_worksheet;
    fn workbook_add_format(wkbk:*mut lxw_workbook)->*mut lxw_format;
    fn workbook_close(wkbk:*mut lxw_workbook)->i32;
    fn lxw_strerror(errnum:i32)->*const i8;
    fn format_set_bg_color(fmt:*mut lxw_format, color: u32);
    fn worksheet_write_string(wksht:*mut lxw_worksheet, row:u32,col:u16,s:*const i8,fmt:*const lxw_format)->i32;
}
impl lxw_workbook {
    fn new(wkbk:&str)->lxw_workbook {
        unsafe {lxw_workbook(workbook_new(CString::new(wkbk).unwrap().as_ptr())) }
    }
    fn add_worksheet(&self,sheetname:&str)->lxw_worksheet {
        unsafe {lxw_worksheet(workbook_add_worksheet(self.0,CString::new(sheetname).unwrap().as_ptr())) }
    }
    fn add_format(&self)->lxw_format {
        unsafe {lxw_format(workbook_add_format(self.0)) }
    }
    fn close(&self)->i32{
        unsafe {workbook_close(self.0)}
    }
    fn strerror(errnum:i32)->&'static str {
        unsafe { CStr::from_ptr(lxw_strerror(errnum)).to_str().unwrap() }
    }
}
impl Drop for lxw_workbook {
    fn drop(&mut self) {
        let rc = self.close();
        if rc != 0 {
            panic!("{}",lxw_workbook::strerror(rc));
        }
    }
}
impl lxw_format {
    fn set_bg_color(&self, color: u32){
        unsafe { format_set_bg_color(self.0,color); }
    }
}
impl lxw_worksheet {
    fn write_string(&self, row:u32, col:u16, s:&str,fmt:lxw_format)->Result<(),String>{
        let s = CString::new(s);
        let rc;
        unsafe { rc = worksheet_write_string(self.0,row,col,s.unwrap().as_ptr(),fmt.0);}
        if rc == 0 {
            Ok(())
        }else {
            Err(lxw_workbook::strerror(rc).to_string())
        }
    }
}

use std::io;
use std::fs::File;
use std::fs::read_dir;
use std::io::prelude::*;
use std::collections::BTreeMap;
type map_t = BTreeMap<i32,i32>;
fn main()->io::Result<()>{
    let mut common:BTreeMap<String,Vec<(char,map_t)>> = BTreeMap::new();
    let mut buf = String::new();
    if let Ok(dir) = read_dir("BabyNames") {
        for file in dir {
            let file = file?;
            let mut f = File::open(file.path())?;
            let path = file.path();
            let fname = path.to_str().unwrap().to_string();
            let it = fname.split('_').collect::<Vec<_>>();
            let it1 = it[0].split('/').collect::<Vec<_>>();
            let year = it1[1].parse::<i32>().unwrap();
            let c = if it[1] == "GirlsNames.txt" {
                'F'
            } else {
                'M'
            };
            buf.clear();
            let _ = f.read_to_string(&mut buf);
            for line in buf.lines() {
                let two:Vec<_> = line.split_whitespace().collect();
                let r = common.entry(two[0].to_string()).or_insert(vec!{(c,map_t::new())});
                (*r).last_mut().unwrap().1.insert(year,two[1].parse::<i32>().unwrap());
            }
        }
    } else {
        println!("Not in directory above BabyNames...");
    }
    let wkbk = lxw_workbook::new("example.xlsx");
    let wksht = wkbk.add_worksheet("Names");
    let hc = wkbk.add_format();
    hc.set_bg_color(0xe0e0e0);
    let gc = wkbk.add_format();
    gc.set_bg_color(0xf9c7ff);
    let bc = wkbk.add_format();
    bc.set_bg_color(0xb8bbff);
    let mut years = BTreeMap::new();
    for (i,j) in (1900..=2012).rev().enumerate() {
        years.insert(j,i);
        let _ = wksht.write_string(0,i as u16+2,j.to_string().as_str(),hc.clone());
    }
    let _ = wksht.write_string(0,0, "Name",hc.clone());
    let _ = wksht.write_string(0,1, "Gender",hc.clone());
    for (ord,(name,pair)) in common.iter().enumerate() {
        for (gender,map) in pair.iter() {
            for (year,value) in map.iter().rev() {
                let clr;
                if *gender == 'F' {
                    clr = gc.clone();
                    let _ = wksht.write_string(ord as u32+1,0,name,gc.clone());
                    let _ = wksht.write_string(ord as u32+1,1,"F",gc.clone());
                } else {
                    clr = bc.clone();
                    let _ = wksht.write_string(ord as u32+1,0,name,bc.clone());
                    let _ = wksht.write_string(ord as u32+1,1,"M",bc.clone());
                }
                let _ = wksht.write_string(ord as u32+1,years[&*year]as u16+2,value.to_string().as_str(),clr);
            }
        }
    }
    Ok(())
}
 

Mimi-95

Iskusan
Poruka
5.313
Napisao sam ovu skriptu pre dva meseca i nalazi se na git-u (logično). Za rad vam treba openpyxl. Samo roknete:
Python:
pip install openpyxl

U principu, odaberete neku tabelu iz baze (u kodu morate reći koju) i pokrenete skriptu. Nije rađen GUI za ovu skriptu, ali imam i sa interfejsom.

Python:
'''
    Author: Aleksandar Arsic
    Contact email: srpskaitucionica@gmail.com
    Github: https://github.com/SrpskaITucionica
'''


from openpyxl import Workbook
import sqlite3

'''
    This part of code converts SQL table into Excel file.
    Database name, table name and excel file name are generic.
    DB should be in the same folder as main.py module, or any module that runs this code
'''

###################### WORKING WITH SQL PART ######################

con = sqlite3.connect('database_name.db')
cursor = con.cursor()

get_data_from_table_sql = "SELECT * FROM table_name"
cursor.execute(get_data_from_table_sql)
# GET TABLE DATA
rows = cursor.fetchall()

# GET COLUMN NAMES
cursor2 = con.execute('SELECT * FROM table_name')
names = list(map(lambda x: x[0], cursor.description))

###################### WORKING WITH EXCEL PART ######################

wb = Workbook()
ws = wb.active
ws.title = 'Worksheet name'

ws.append(names)
for row in rows:
    ws.append(list(row))

wb.save('excel_file_name.xlsx')
Може ли објашњење шта је гит?
 

Baby Yoda ♥

Contributor
Poruka
18.260
Може ли објашњење шта је гит?
GitHub je mesto gde programeri mogu kačiti svoj kod (dele sa drugima), rade zajedno na projektima.
Tipa, radi se neki globalni projekat gde svako može da da svoj doprines ukoliko ima te privilegije. Tu nastupa sistem verzionisanja.

Recimo, glavni projekat je jedna vertikalna linija, ali, ako ja treba da dodam neku stvar, neću je menjati direktno na projektu jer drugi isto žele da rade na tom projektu. Ne možemo se mešati. Zato ja napravim novu granu gde imam celu kopiju glavnog projekta. Radim na svom kompu izmene i one se ne vide na glavnom projektu. Kada sam završio, ja vršim spajanje sa glavnom (master) granom gde moje izmene postaju deo glavne aplikacije. Ostali programeri moraju sada povući te izmene na njihove grane kako bi imali kompletnu verziju, da ne dođe do konflikta u fajlovima.
 

Frederick_

Zainteresovan član
Poruka
345
Може ли објашњење шта је гит?
Git je platforma za kontrolu versionisanja (tzv. versioning control).
Git je, de facto, standard koji gotovo svi progameri koriste za skladistenje svog koda, za pracenje toka razvoja koda (svako dodavanje nekog parceta koda se belezi i moze se pratiti ko je kada sta dodao), i mnogo pomaze u samoj organizaciji kada vise ljudi radi na jednom projektu (zato je i davnih dana osmisljen od strane Linus Torvaldsa - kreatora linuxa).

Github je cloud platforma koja radi na principu git-a.
 
Poslednja izmena:

bmaxa

Buduća legenda
Poruka
25.938
Git je platforma za kontrolu versionisanja (tzv. versioning control).
Git je, de facto, standard koji gotovo svi progameri koriste za skladistenje svog koda, za pracenje toka razvoja koda (svako dodavanje nekog parceta koda se belezi i moze se pratiti ko je kada sta dodao), i mnogo pomaze u samoj organizaciji kada vise ljudi radi na jednom projektu (zato je i davnih dana osmisljen od strane Linus Torvaldsa - kreatora linuxa).

Github je cloud platforma koja radi na principu git-a.
Linus nije bio zadovoljan ostalim versioning sistemima, pa je krenuo da piše git, koji eto posta najpopularniji...
 

Top
  Blokirali ste reklame
Dragi prijatelju, nemojte da blokirate reklame - isključite Ad Blocker na Forumu, jer će tako mesto vaših susreta na Krstarici ostati besplatno za korišćenje.