MySQL adatbázisból CSV fájlba Pythonban
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:]))