import plac import pyodbc from os import path @plac.pos("query", "SQL Query", type=str) @plac.pos("mode", "", choices=["in", "out", "queryout"]) @plac.pos("csv_file", "", type=str) @plac.opt("Server", "Hostname or DSN", type=str) @plac.opt("database", "", type=str) @plac.opt("User", "", type=str) @plac.opt("Password", "", type=str) @plac.flg("charset", "") @plac.opt("Codepage", "", type=str) @plac.opt("errorlog", "", type=str) def run( query, mode, csv_file, Server="localhost\\GLOBALCUBE", database="master", User="sa", Password="Mffu3011#", charset=False, Codepage="65001", errorlog="error.log", ): dsn = f"dsn={Server};uid={User};pwd={Password}" if Codepage.isnumeric(): Codepage = "cp" + Codepage if mode == "queryout": queryout(dsn, query, csv_file, Codepage, errorlog) return print("This is madness") def convert_data(element): txt = str(element) txt = txt.replace("None", "") txt = txt.replace("False", "0").replace("True", "1") txt = txt.replace("\t", "").replace("\r", "").replace("\n", "") txt = txt.replace("\x81", "").replace("\x90", "") return txt def queryout(dsn, query, csv_file, codepage, errorlog): if path.exists(query): with open(query, "r", encoding=codepage) as frh: query = frh.read() try: conn = pyodbc.connect(dsn) cursor = conn.cursor() cursor.execute(query) except pyodbc.InterfaceError as e: print(e.args[1]) with open(csv_file, "w", encoding=codepage) as fwh: while row := cursor.fetchone(): try: fwh.write(("\t".join(map(convert_data, row)) + "\n")) except pyodbc.DataError as e: print(e.args[1]) if __name__ == "__main__": plac.call(run)