Tue. Mar 5th, 2024

Flask Python Tutorial: Cargar archivo CSV e Insertar filas en la base de datos MySQL

By admin Jan 30, 2024

Python es un lenguaje genial, tan pronto como termines tus primeros proyectos con él, quedarás empeñado. Es un lenguaje de propósito general y está ganando popularidad en los últimos años entre los científicos e ingenieros de datos. Personalmente, recomiendo Python a los novatos, especialmente a los adolescentes, no solo porque tiene una curva de aprendizaje directa simple, sino también porque tiene una gran comunidad y un rico ecosistema.

Acerca de este tutorial

Estaba ayudando a un amigo a resolver problemas dividiéndolos en pequeños problemas y resolviéndolos uno por uno. Así que aquí está la asignación de código como el problema principal que estamos tratando de resolver.

El problema:Utilice Python para cargar e importar archivos CSV en una tabla predefinida en la base de datos MySQL.

Pasos

  1. Crear formulario de carga de archivos
  2. Sube el CSV usando Flask
  3. Analizar datos de archivos CSV
  4. Conéctese a la base de datos
  5. Insertar filas en una tabla específica en la base de datos

Pila que usaremos:

  1. Matraz;Un marco web Python Minimal (Micro).
  2. mysql;Si usas Windows puedes usar WAMP o XAMPP, si usas Linux XAMPP es una buena opción. Si utiliza macOS, XAMPP o MAMP son buenas soluciones.
  3. pandasPandas es una biblioteca de Python de código abierto para análisis y manipulación de datos. Es ampliamente utilizado entre científicos e ingenieros de datos.
  4. conector.mysql; La biblioteca que usaremos para conectarnos a la base de datos MySQL e insertar los datos.

Requisitos

  • Instale Flask; aquí instalaré Python directamente con pippero recomiendo encarecidamente usar python-virtualenv para las mejores prácticas.

pip install Flask

  • Instale XAMPP; El paquete XAMPP incluirá la base de datos MySQL y PHPMyAdmin para administrar nuestras bases de datos MySQL.
  • Instale las bibliotecas necesarias (Pandas, sql.connector)

pip install pandas
pip install sql.connector

  • Un archivo CSV de muestra que usaré addresses.csv de aquí.

0 Prepara el matraz

Ahora probemos si Flask funciona comenzando a crear nuestro archivo principal. main.py

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
return "Flask CSV Filer Uploader and Parser"

if (__name__ == "__main__"):
app.run(port = 5000)

Podemos ejecutar el archivo por $ python main.py luego dirigiéndose ahttp://127.0.0.1:5000/.

Si todo va según lo planeado, recibirá el mensaje renderizado.

El siguiente paso es crear la página HTML que será responsable de cargar los archivos CSV.

1- Crear formulario de carga de archivos

Vamos a crear templates directorio y nuestro formulario de carga HTML en él.

<!doctype html>
<html>
<head>
<title>FLASK CSV File Upload</title>
</head>
<body>
<h1>Upload your CSV file</h1>
<form method="POST" action="" enctype="multipart/form-data">
<p><input type="file" name="file"></p>
<p><input type="submit" value="Submit"></p>
</form>
</body>
</html>

2- Sube los archivos al servidor.

Ahora necesitamos aceptar los archivos entrantes de este formulario, agreguemos la función razonable en main.py

from flask import Flask, render_template, request, redirect, url_for
import os
from os.path import join, dirname, realpath

app = Flask(__name__)

# enable debugging mode
app.config["DEBUG"] = True

# Upload folder
UPLOAD_FOLDER = 'static/files'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

# Root URL
@app.route('/')
def index():
# Set The upload HTML template '\templates\index.html'
return render_template('index.html')

# Get the uploaded files
@app.route("/", methods=['POST'])
def uploadFiles():
# get the uploaded file
uploaded_file = request.files['file']
if uploaded_file.filename != '':
file_path = os.path.join(app.config['UPLOAD_FOLDER'], uploaded_file.filename)
# set the file path
uploaded_file.save(file_path)
# save the file
return redirect(url_for('index'))

if (__name__ == "__main__"):
app.run(port = 5000)

Como todo está configurado, podemos probar la carga del archivo ahora en http://127.0.0.1:5000/ Si todo está bien, puedes ver los archivos subidos en /static/files/

3- Analizar el archivo CSV

Para analizar los datos del archivo CSV en filas, usaremos pandas la biblioteca de análisis y manipulación de datos.

  • Importar la biblioteca

import pandas as pd

Función de análisis CSV

def parseCSV(filePath):
# CVS Column Names
col_names = ['first_name','last_name','address', 'street', 'state' , 'zip']
# Use Pandas to parse the CSV file
csvData = pd.read_csv(filePath,names=col_names, header=None)
# Loop through the Rows
for i,row in csvData.iterrows():
print(i,row['first_name'],row['last_name'],row['address'],row['street'],row['state'],row['zip'],)

No olvides agregar parseCSV(file_path) funcionar poco después de guardar el archivo en uploadFiles

# Output
0 John Doe 120 jefferson st. Riverside NJ 8075
1 Jack McGinnis 220 hobo Av. Phila PA 9119
2 John "Da Man" Repici 120 Jefferson St. Riverside NJ 8075
3 Stephen Tyler 7452 Terrace "At the Plaza" road SomeTown SD 91234
4 nan Blankman nan SomeTown SD 298
5 Joan "the bone", Anne Jet 9th, at Terrace plc Desert City CO 123

4- Conéctese a la base de datos (XAMPP/ MySQL)

  • En este paso nos conectaremos a la base de datos y nos aseguraremos de que funcione.
  • Agregar import mysql.connector
  • Conéctese al servidor MySQL

import mysql.connector

mydb = mysql.connector.connect(
host="localhost",
user="root",
password="",
database="databaseName"
)

Asegúrese de reemplazar los condicionales correctamente.

  • Para probar la conexión de la base de datos, enumeremos todas las bases de datos disponibles:

mycursor = mydb.cursor()

mycursor.execute("SHOW DATABASES")

# List All Databases
for x in mycursor:
print(x)
Cree la base de datos y la tabla en la que desea insertar las filas con los nombres de las columnas correspondientes.

5- Insertar filas en la base de datos

Con este paso simplemente actualizaremos nuestro bucle para insertar cada fila en la base de datos.

def parseCSV(filePath):
# CVS Column Names
col_names = ['first_name','last_name','address', 'street', 'state' , 'zip']
# Use Pandas to parse the CSV file
csvData = pd.read_csv(filePath,names=col_names, header=None)
# Loop through the Rows
for i,row in csvData.iterrows():
sql = "INSERT INTO addresses (first_name, last_name, address, street, state, zip) VALUES (%s, %s, %s, %s, %s, %s)"
value = (row['first_name'],row['last_name'],row['address'],row['street'],row['state'],str(row['zip']))
mycursor.execute(sql, value, if_exists="append")
mydb.commit()
print(i,row['first_name'],row['last_name'],row['address'],row['street'],row['state'],row['zip'])

Como todo va según lo previsto, comprueba las nuevas entradas de datos en la base de datos.

Solución de problemas y práctica

Al concluir este tutorial, aquí hay algunas soluciones de problemas e ideas para continuar y practicar.

  • NaN; no enviar NaN valores a la base de datos
  • Utilice el formulario seguro para conocer las mejores prácticas
  • Cree e inserte tablas/columnas basadas en la estructura CSV
  • Insertar solo valores nuevos
  • Establecer opciones de carga: aceptar solo archivos CSV, limitar el tamaño del archivo
  • Sube varios archivos
  • Mover archivos terminados a done directamente tan pronto como se insertan
  • Mejor gestión de errores
  • Enumere todos los archivos realizados y cargados en index.html
  • Ver tabla CSV en index.html
  • Convertir el csv en json

código completo

main.py

from flask import Flask, render_template, request, redirect, url_for
import os
from os.path import join, dirname, realpath

import pandas as pd
import mysql.connector

app = Flask(__name__)

# enable debugging mode
app.config["DEBUG"] = True

# Upload folder
UPLOAD_FOLDER = 'static/files'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

# Database
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="",
database="csvdata"
)

mycursor = mydb.cursor()

mycursor.execute("SHOW DATABASES")

# View All Database
for x in mycursor:
print(x)

# Root URL
@app.route('/')
def index():
# Set The upload HTML template '\templates\index.html'
return render_template('index.html')

# Get the uploaded files
@app.route("/", methods=['POST'])
def uploadFiles():
# get the uploaded file
uploaded_file = request.files['file']
if uploaded_file.filename != '':
file_path = os.path.join(app.config['UPLOAD_FOLDER'], uploaded_file.filename)
# set the file path
uploaded_file.save(file_path)
parseCSV(file_path)
# save the file
return redirect(url_for('index'))

def parseCSV(filePath):
# CVS Column Names
col_names = ['first_name','last_name','address', 'street', 'state' , 'zip']
# Use Pandas to parse the CSV file
csvData = pd.read_csv(filePath,names=col_names, header=None)
# Loop through the Rows
for i,row in csvData.iterrows():
sql = "INSERT INTO addresses (first_name, last_name, address, street, state, zip) VALUES (%s, %s, %s, %s, %s, %s)"
value = (row['first_name'],row['last_name'],row['address'],row['street'],row['state'],str(row['zip']))
mycursor.execute(sql, value, if_exists="append")
mydb.commit()
print(i,row['first_name'],row['last_name'],row['address'],row['street'],row['state'],row['zip'])

if (__name__ == "__main__"):
app.run(port = 5000)

Si te gusta este tutorial rápido, compártelo y si tienes algún comentario, háznoslo saber.

Recursos

Foto de Hitesh Choudhary en Unsplash

Etiquetas

Tutorial de Flask Python CSV ¿Cómo?

By admin

Related Post

Leave a Reply

Your email address will not be published. Required fields are marked *