W Pythonie każdą rzecz można napisać w 3 linijkach!
Konfucjusz (raczej tego nie powiedział)
Rozpoczynamy nową serię krótkich poradników, które możesz wziąć i szybko wykorzystać w swoim projekcie.
A na co to, a komu to potrzebne?
Czasem chcemy sprawdzić jakiś pomysł. Albo zrobić jakieś PoC (Proof of Concept). Albo napisać “jednorazowy” skrypt, który coś za nas zrobi.
I wtedy wchodzę ja, cały na biało. Daję Ci gotową “recepturę”, którą możesz gdzieś wykorzystać.
I to w trzech* linijkach Pythonowego kodu!
* oczywiście nie liczymy importów
A co dzisiaj?
Jak pobrać dane z MySQL i zapisać do CSV w Pythonie?
Czasem chcemy pobrać jakieś dane i szybko zapisać je do pliku. W międzyczasie może “zachce” nam się je zmodyfikować.
Możemy do tego celu wykorzystać znany i lubiany w środowisku Data Science i Machine Learning pandas!
Show me the kodzik!
A o to i kodzik, który pozwala pobrać dane z mysql przy pomocy pandas i zapisać w CSV albo JSON, albo nawet Excel – po przecież mamy całą machinerię pandasa.
connection = sqlalchemy.create_engine("mysql://{}:{}@{}/{}?charset=utf8mb4".format(user, password, server, database)).connect()
pd.read_sql_query("select * from table", connection).to_csv("output.csv")
print("jeszcze linijka została elo")
Uzupełnij user
, password
, server
i database
wedle uznania, zmodyfikuj zapytanie SQL, które wykorzystujesz i już.
Nieco ładniejsza wersja tego skryptu może wyglądać tak.
#!/usr/bin/env python
import sqlalchemy
import pandas as pd
def extract_table_to_csv(mysql_conn, table_name, output_path):
query = f"select * from {table_name}"
result_df = pd.read_sql_query(query, mysql_conn)
result_df.to_csv(output_path)
def get_db_connection(user, password, server, database):
# connect to the database
engine = sqlalchemy.create_engine(
f"mysql://{user}:{password}@{server}/{database}?charset=utf8mb4"
)
connection = engine.connect()
return connection
if __name__ == "__main__":
# dopraw do smaku*
user = ""
pass = ""
server = ""
database = ""
table_name = ""
output_path = ""
# ognia! (zapięte w context, żeby się połączenie ładnie zamknęło)
with get_db_connection(user, password, server, database) as db_connection:
extract_table_to_csv(db_connection, table_name, output_path)
Bierzcie i kopiujcie z tego wszyscy. Wszelkie uwagi mile widziane 🙂