Természetesen ez az oldal is használ cookie-kat.
Nem tetszik?

Nem, elmegyek
home

T  h  e
D a r k
S i t e

Magánjellegű internetes dokumentációs és publikációs felület és kísérleti weboldal a Morkpy tartalomkezelő rendszer fejlesztési folyamatainak tesztelésére és szemléltetésére

Címke: csv

MySQL adatbázisból CSV fájlba Pythonban

dark Dokumentáció 2020-12-02 08:57:00


Előfordul, hogy adatázisból kell kimutatást készíteni, amit Excelben nézegethetnek, vagy éppen adatokat kell átvarázsolni MySQL-ből egy CSV formátumot váró rendszerbe. Nem bonyolult, de legutóbb megint keresgélnem kellett, hogy milyen API-n keresztül és hogyan lehet Pythonban lekérdezéseket végrehajtani, illetve, hogyan kell a csv writer-t paraméterezni, ezért most vázlatosan idedokumentálom, hogy legközelebb ne kelljen sokat gondolkozni, hogy hol keressem.

venv/bin/pip install mysqlclient
#!/usr/bin/env venv/bin/python3
import csv
import re
import sys

import MySQLdb

def main(db_host: str, db_db: str, db_user: str, db_passwd: str, outfile: str):
    db = MySQLdb.connect(host=db_host,
                         db=db_db,
                         user=db_user,
                         passwd=db_passwd,
                         charset='utf8')
    cursor = db.cursor(MySQLdb.cursors.DictCursor)

    cursor.execute("""\
        SELECT * FROM `user`
        JOIN `group` ON user_group_id = group.group_id
        WHERE user_created
        ORDER BY user_created DESC""")

    with open(outfile, "w") as csvfile:
        csvwriter = csv.writer(csvfile, delimiter=",")
        csvwriter.writerow(
            ("EMAIL", "FIRSTNAME", "PHONE", "CREATION_DATE", "GENDER"))

        for line in cursor.fetchall():
            email: str = line['user_email']
            firstname: str = line['group_desc']
            phone: str = ""
            creation: str = str(
                line['user_created'])[0:10]if line['user_created']else ""
            gender: str = str(line['user_gender']) or "0"

            csvwriter.writerow((email, firstname, phone, creation, gender))

    cursor.close()

if __name__ == "__main__":
    sys.exit(main(*sys.argv[1:]))