Aplicación WEB con PYTHON ► CRUD python web
Transcribed by TurboScribe.ai. Go Unlimited to remove this message.
(0:05 - 2:02)
Hola, ¿qué tal? Soy el profe Oscar U. del canal de Develoteca y en este vídeo te voy a enseñar
cómo crear un CRUD con Python usando Flash, pero nos vamos a enfocar a aprender todo el
flujo que existe entre los datos, la base de datos y el procesamiento de la información. En este
CRUD vamos a ver cómo agregar un empleado, cómo editar un empleado y cómo borrar ese
empleado. Además de eso, pues vamos a validar todos los datos de entrada y precisamente
este proyecto se va a apoyar del libro llamado Aprendizaje Flash que está disponible en
ReapTutorials.
Así que comencemos, espero verte y continuamos. Antes de empezar vamos a ver lo que son
los materiales. En este caso vamos a utilizar Python para hacer todo lo que es el CRUD.
Además de eso, pues una vez que ya hemos instalado Python, vamos a requerir de lo que es el
framework llamado Flash, que es el que nos va a apoyar a construir este CRUD.
Indudablemente también necesitamos lo que es Visual Studio Code para codificar y poder
trabajar con nuestro CRUD. Además de eso, también vamos a requerir lo que es una base de
datos y en este caso vamos a descargarnos lo que es XAMPP, que contiene PHP, Apache, pero
solamente vamos a utilizar MariaDB o en este caso MySQL para poder hacer nuestro CRUD.
Una vez que ya instalamos lo que es Python, ya instalamos lo que es Visual Studio Code y ya
tenemos a disposición nuestro servidor MySQL, vamos a crearnos una carpeta en nuestra
carpeta C. En este caso ahí estoy creando lo que es una carpeta llamada Sistema Empleado, que
es donde vamos a poner todo lo necesario para que pueda funcionar este CRUD. Como te
puedes dar cuenta también tenemos corriendo lo que es XAMPP y en este caso he activado lo
que es MySQL y Apache. La conexión que vamos a utilizar va a acceder directamente a MySQL
para tomar información.
(2:03 - 4:04)
Entonces vamos a darnos la tarea también de crear la base de datos y lo que es la tabla. Una
vez que nosotros ya tenemos este contexto, pues simplemente vamos a abrir lo que es esa
carpeta y vamos a irnos a lo que es File, Open Folder y buscar esa carpeta. En este caso, una vez
que nosotros ya abrimos esa carpeta, pues va a aparecer como Sistema Empleado, en donde
nosotros podemos ver pues que tenemos ahí a disposición ya esta carpeta para crear nuestros
documentos.
También vamos a requerir instalar algunas extensiones. En este caso vamos a irnos en esta
parte y aquí vamos a distinguir qué extensiones necesitamos. Primero que nada vamos a
instalar Bootstrap B4 Snippets, que prácticamente nos va a ayudar a escribir código, pero en
este caso código HTML para que se puedan incluir elementos de Bootstrap.
Además de eso también vamos a descargarnos el que es Flask Snippets y aquí lo vamos a
utilizar para ciertas instrucciones que vamos a requerir en el template y de hecho pues nos va a
aligerar mucho lo que es el trabajo. Independientemente de eso también vamos a instalarnos
lo que es Flask Snippets, que es otra extensión, pero a diferencia del anterior aquí nos va a
completar algunas instrucciones que vamos a requerir en nuestro código Python. Cabe recalcar
que Flask Snippets es diferente a Flask Snippets.
Además de eso vamos a descargarnos el que es Jinja 2 Snippets y aquí pues simplemente
vamos a poder utilizar todas las instrucciones para que al final podamos también implementar
en nuestros templates. Yo tengo instalado lo que es otras dos extensiones que en este caso son
propiamente para la interfaz, que prácticamente nos pone íconos y pues bueno nos maneja un
poco los colores pues de todo Visual Studio Code, pero si no quieres instalarlo pues
simplemente lo puedes omitir. Aquí lo importante y lo interesante es que vamos a utilizar estas
extensiones para aligerar un poco más nuestro trabajo.
(4:06 - 4:49)
Vamos a empezar entonces por la base de datos. Aquí en el navegador como ya tenemos
corriendo lo que es XAMPP, podemos escribir localhost diagonal phpMyAdmin y una vez que
nosotros ya escribimos esto pues ya podemos crear nuestra base de datos y lo vamos a hacer
del lado izquierdo. Aquí simplemente vamos a irnos a nuevo y vamos a crear sistema.
Vamos a ponerle sistema y le vamos a dar en crear. Aquí mismo nosotros vamos a crear una
tabla que se llama empleados y le vamos a poner lo que es el número 4, en este caso haciendo
alusión a que son cuatro columnas. Vamos a manejar lo que es el ID, el nombre, el correo y una
imagen.
(4:50 - 6:28)
Una vez que nosotros ya tenemos los datos pues simplemente vamos a irnos al botón de
continuar y cuando nosotros le demos clic pues nos va a pedir que nosotros pongamos la
estructura. Aquí mismo pues vamos a poner lo que es un ID, vamos a poner un nombre, vamos
a poner un correo y vamos a poner lo que es una foto. Además de eso pues vamos a indicar
que el primer elemento es autoincremental por lo que vamos a seleccionar del lado derecho
aquí mismo en donde podemos observar esta columna.
Vamos a seleccionar lo que es pues este check. Esto con el objetivo de decir que realmente este
es un autoincremental y precisamente es un número. Después de eso pues vamos a poner lo
que es un número 10.
Aquí podemos ponerle también 255 para el nombre, para el correo podemos utilizar unos 255
o 500 y aquí vamos a ponerle unos 5.000. En este caso tenemos que cambiar también lo que
son las opciones porque la primera es entera y después pues vamos a seleccionar barchar.
Nosotros tenemos que especificar aquí que todo esto es un barchar. Una vez que nosotros ya
ponemos todo esto en nuestra tabla pues ya podemos darle en continuar.
Aquí en la parte de abajo le damos guardar y de forma automática ya se crea lo que es la tabla
y esta tabla va a ser con la que vamos a empezar a trabajar. Aquí vamos a guardar los nombres
del empleado, el correo y la fotografía. Ahora lo que vamos a hacer es irnos a nuestro Visual
Studio Code y en este caso vamos a irnos a terminal.
(6:28 - 7:55)
Una vez que nosotros presionamos en terminal pues vamos a darle en nuevo terminal. Para
saber si nosotros ya instalamos Python, en este caso vamos a poner Python y le vamos a dar en
enter. Aquí como podemos observar Python se ha instalado en mi máquina y esto significa que
se ha instalado una versión 3. Para salir simplemente vamos a poner exit paréntesis y enter.
Una vez que hacemos esto pues simplemente nos vamos a cerciorar de instalar flask y para
asegurarnos que vamos a poder instalar flask vamos a utilizar pip. Pip es prácticamente un
sistema de gestión de paquetes que Python utiliza y en este caso nos va a servir para poder
instalar lo que es flask. Así que vamos a escribir pip install flask.
Le vamos a dar en enter y vamos a esperar un cierto tiempo mientras se va descargando lo que
es este framework. Una vez que ya termina este proceso simplemente podemos cerciorarnos
de que flask ya se instaló y esto es que vamos a escribir en la terminal pip list para saber si
realmente ya se instaló. Aquí podemos observar que flask ya se ha instalado y en este caso está
en nuestra lista de paquetes donde nosotros vamos a poder acceder para utilizar este
framework.
(7:55 - 14:00)
Además de eso también vamos a requerir instalar otros paquetes como por ejemplo en el caso
de MySQL y en este caso vamos a utilizar el que se llama flask- MySQL para poder acceder a la
base de datos. Entonces vamos a darle en flask- MySQL, aquí tenemos que tener cuidado
porque es con mayúscula y escribimos y le damos en enter. Una vez que ya terminamos con el
proceso de instalación nos queda un último paquete para poder instalar y poder trabajar con lo
que son los templates.
Este paquete se llama Jinja. Entonces vamos a ponerle pip install jinja2. Prácticamente nos va a
servir para trabajar con lo que es el template.
Aquí son algunas instrucciones que nos van a permitir generar instrucciones de acceso a
diferentes contenidos html que interactúen con nuestro código. Nuevamente si ya hemos
instalado todo nosotros podemos ver la siguiente lista utilizando pip list. Entonces aquí pues
vamos a buscar lo que hemos instalado para cerciorarnos de que tenemos instalado todo.
Aquí podemos observar la instalación de flask, flask- MySQL y tenemos abajo tenemos a jinja2
que es la versión 2.11.2. Entonces ya podemos continuar. Para empezar entonces vamos a
crear un documento .py. Para eso pues vamos a darle en botón secundario nuevo archivo y le
vamos a poner app.py que prácticamente es un documento para Python. Esto prácticamente
nos va a dar la pauta para empezar.
Pero antes de empezar pues vamos a crear lo que es una carpeta adentro del sistema
empleados. Aquí vamos a ponerle lo que son templates y adentro de templates pues vamos a
poner otra nueva carpeta que le vamos a llamar empleados. Cuando nosotros creemos esta
carpeta adentro de esa carpeta empleados vamos a crear un nuevo archivo.
Este archivo le vamos a poner index.html. Como nos podemos dar cuenta o en este caso
puedes darte cuenta nosotros estamos creando un archivo index.html adentro de lo que es la
carpeta empleados y adentro de lo que es la carpeta templates. ¿Por qué? Porque templates de
forma automática nos va a servir para acceder a todas esas plantillas o a todas esas vistas que
vamos a requerir en nuestro CRUD y nosotros hemos creado lo que es un documento app.py
que es donde vamos a incluir nuestro código. Así que bueno ya estando en index.html vamos a
escribir hbs4 que prácticamente es el uso de una extensión que hemos instalado antes.
Vamos a darle en enter y vamos a ver que de forma general se crea ya un documento que nos
incluye bootstrap en dicho documento. Aquí simplemente vamos a darle en inicio y vamos a
poner aquí un hola flask. Con esto nosotros ya tenemos nuestro documento html.
Vamos a pasarnos ahora a lo que es el app.py porque nosotros queremos mostrar el contenido
de index.html en nuestra aplicación. Entonces para hacer esto vamos a poner front que sería
vamos a utilizar flask, vamos a importar todo flask para que podamos utilizarlo, es decir, vamos
a incluir todo el framework, vamos a poner en este caso también vamos a poner para flask
importar lo que es render que nos va a permitir mostrar todos los templates, en este caso el
template que vamos a hacer o que ya hicimos aquí con index.html pues nos va a servir para
que se pueda mostrar la información, pero esto lo vamos a lograr gracias a render templates y
ahorita vamos a ver cómo. Una vez que nosotros ya importamos todo lo que necesitamos, pues
bueno, más adelante también vamos a importar MySQL, así que no te preocupes.
Vamos a poner app flask para poder utilizar realmente esta instrucción de creación de nuestro
sitio. Vamos a ponerle name y con esto nosotros vamos a crear una primera aplicación. La
aplicación aquí va a necesitar un ruteo.
Para hacer el ruteo simplemente vamos a poner app routes entre paréntesis y le vamos a poner
lo siguiente. Vamos a poner un slash. Si nosotros escorremos nuestra aplicación y el usuario
entra, pues directamente entró a lo que es la raíz.
Eso significa que accedió directamente con un slash. Para que el usuario pueda ver ese
index.html que ya hemos creado en lo que es la carpeta templates empleados, vamos a poner
lo siguiente. Vamos a ponerle index entre paréntesis, dos puntos y abajo le vamos a decir que
retorne aquí lo que te comentaba haga un retorno del render template.
Entre paréntesis, pues vamos a poner lo que es la ruta. Esta ruta es empleados diagonal
index.html que propiamente identifica la carpeta empleados y entra a lo que es el archivo
index. De hecho nosotros estamos haciendo lo siguiente, que cuando el usuario escriba slash
directamente se vaya a buscar lo que es el archivo index.html. Y para que todo esto se dé
nosotros vamos a crear la siguiente instrucción.
(14:01 - 16:25)
Para que Python pueda interpretar todo lo que nosotros estamos haciendo, vamos a poner
name igual, igual y aquí, bueno, estas son unas líneas de código que Python requiere para que
se pueda empezar a trabajar con toda la aplicación. Vamos a crear lo que es la aplicación o la
referencia a la aplicación y vamos a hacer que esta aplicación corra y va a correr en modo de
debug. Esto va a significar que nosotros vamos a correr nuestro código y va a estar activo todo
lo que es el debugger.
Esto significa que nos va a dar las pautas de lo que va a estar sucediendo y vamos a poder
trabajar tranquilamente. En este caso, si nosotros ya tenemos nuestra aplicación en flask,
vamos a repasar un poco. Aquí ya hemos incluido todo lo que necesitamos para hacer
renderizado de templates y en este caso también el uso de flask.
Aquí hemos creado nuestra aplicación y esa aplicación pues va a recibir solicitudes mediante la
url y en este caso cuando se escriba en lo que es el host o en la página principal pues se va a
acceder directamente a index.html. Para correr esto y que no quede duda de qué está
sucediendo, vamos a poner lo siguiente. Le voy a poner python app.py que prácticamente este
archivo es el app.py. Vamos a correrlo y darle enter. Aquí como nos podemos dar cuenta se ha
creado un servidor y este servidor tiene varias configuraciones, pero la que más nos importa es
realmente la que aparece en la última línea, que es la dirección donde nosotros vamos a ver el
resultado de todo lo que ya hemos hecho.
Para que no quede duda, vamos a irnos al navegador y escribimos la siguiente ruta. Una vez
que ya escribimos en el navegador lo que es esta dirección, pues ya podemos ver que se le
hace una solicitud y es lo que te comentaba. Cuando se le pide la solicitud en diagonal, quiere
decir que se está escribiendo técnicamente el host 127.0.0.1 con el puerto 5000, que es la
definición de lo que es la diagonal y de forma automática se accede al index.html que ya está
siendo renderizado por flask.
(16:26 - 17:33)
Para conectarnos directamente a la base de datos, vamos a utilizar algo que se llama flask-
ex.mysql en este caso, y lo vamos a importar del módulo mysql. Esto que vamos a utilizar
prácticamente lo vamos a utilizar porque nos vamos a conectar a una base de datos mysql, así
que vamos a ver cómo trabaja. Nosotros necesitamos saber qué datos tenemos para nuestra
conexión, es decir, nuestro servidor y pues nuestro host y nuestro usuario e inclusive el
nombre de la base de datos.
Nosotros vamos a utilizar por default la que tiene xampp. Por ejemplo, en este caso vamos a
poner config y acá hay unos parámetros y unas opciones que necesitamos especificar, como
por ejemplo el nombre del host. Este creo que ya lo podrías reconocer, pero si no lo conoces,
pues te comento en corto que el servidor mysql requiere de una ruta y en este caso es
localhost.
(17:34 - 18:41)
Eso significa que si nosotros accedemos a un servidor mediante una dirección IP, esta dirección
IP se va a interpretar como 127.0.0.1 y se identifica por el nombre de localhost. Entonces lo que
estamos haciendo es crear esta referencia hacia ese host. Aquí hay que tener mucho cuidado
porque el nombre de la variable tiene que estar en mayúscula.
Le estamos diciendo que para que se conecte a la base de datos mysql vamos a utilizar el host
localhost. Y bien, vamos a hacer lo mismo, pero en este caso vamos a utilizar cuatro
instrucciones más. La siguiente va a ser rod y aquí va a ser, en vez de host, le vamos a poner
user, porque en este caso es el usuario.
Por default xampp y mysql tienen rod. Después de esto le vamos a poner lo que es el password,
que vendría siendo, aquí pues no hay password, así que lo dejamos vacío. Inclusive lo podemos
omitir y de forma automática va a entrar.
(18:42 - 19:41)
Aquí le vamos a poner, en vez de host, le vamos a cambiar a base de datos o database. Aquí
nosotros hemos creado en xampp una base de datos. Esta base de datos se llama sistema.
Por último vamos a hacer que mysql inicie esa conexión, así que le vamos a poner init app y le
vamos a poner todas las configuraciones que hemos declarado con anterioridad. Entonces
estamos definiendo que vamos a utilizar aquí parte del módulo de mysql que se llama flask-
ex.mysql. Vamos a declarar lo que es el uso de mysql pues pasando las instrucciones del host
donde se encuentra esa base de datos, el usuario y la contraseña y pues también el nombre de
esa base de datos. Y pues también vamos a crear lo que es esa conexión con esos datos.
(19:42 - 20:14)
Una vez que nosotros ya terminamos, vamos a pasarnos al índex y aquí viene algo interesante
porque vamos a generar una instrucción SQL para hacer unas pruebas. Así que vamos a poner
una instrucción SQL y esta instrucción SQL se va a conectar utilizando mysql.connect entre
paréntesis. Esto pues va a ser referencia prácticamente a esta conexión que hemos creado,
pero simplemente se va a conectar.
(20:14 - 21:47)
Aquí nada más tenemos lo que son los datos, así que tenemos que utilizar la conexión. Después
de que se conecte, pues simplemente vamos a utilizar lo que comúnmente le llamamos cursor
y este cursor es prácticamente información o un lugar donde nosotros vamos a almacenar todo
lo que vamos a ejecutar. Así que vamos a poner con la conexión que ya creamos y le vamos a
poner cursor entre paréntesis y ahora que ya tenemos ese cursor, pues vamos a poder ejecutar
esa instrucción.
Así que vamos a poner execute entre paréntesis el SQL que queremos ejecutar y por último
vamos a cerrar lo que es esa conexión haciendo un commit. Este commit le va a decir que esa
instrucción se terminó. Ahora bien, aquí la duda sería cómo pruebo esta conexión, cómo sé que
realmente está funcionando y cómo sé que ya me conecté directamente a la base de datos.
Lo que vamos a hacer es utilizar una instrucción de MySQL para insertar información, así que
vamos a pasarnos a la base de datos y en esta base de datos que ya tenemos aquí, que se llama
empleados, vamos a insertar información. Directamente vamos a poner lo que es el nombre, le
voy a poner Oscar, le voy a poner correo perezoscar arroba gmail punto com y le voy a poner
una foto punto jpg. Simplemente esta información me va a servir para probar esa conexión y
para insertar un dato, para que pues podamos empezar con seguridad.
(21:48 - 24:33)
Nosotros vamos a agarrar esta instrucción de MySQL y vamos a regresar. Una vez que nosotros
identificamos que tenemos un string para poner realmente esa instrucción, pues pegamos esa
instrucción y nuevamente corremos lo que es la aplicación. Si nos damos cuenta y nosotros no
hemos detenido lo que es la aplicación, cuando guardemos todo de forma automática se va a
reestructurar todo esto y se va a volver a correr.
Así que podemos actualizar nuestra página escribiendo esa misma ruta de 127.0.0.1, pero en
este caso como lo hemos actualizado, por ejemplo aquí, pues nosotros podemos ver que
regresando nuevamente a nuestra tabla ese registro se ha insertado, inclusive lo hice dos
veces. Así que, bueno, puedes actualizar las veces que tú desees e irte nuevamente a la tabla,
pues para ver que esa información se ha insertado en nuestra tabla empleados. Vamos a crear
las estructuras que nos van a servir para ingresar información, editar información y pues en
este caso lo vamos a estructurar en lo que es la carpeta empleados.
Entonces para que nosotros tengamos esa pauta, pues vamos a tener que irnos a esa carpeta
aquí y vamos a crear en esa carpeta pues los siguientes archivos. Vamos a poner un create.html
que propiamente me va a servir pues para crear un nuevo registro o en este caso un nuevo
empleado. Vamos a guardarlo y vamos a crear nuevamente otro archivo.
Este otro archivo va a ser edit que me va a mostrar la información de lo que es ese empleado.
Así que le vamos a poner edit.html. Para que todo funcione, nosotros vamos a tener que crear
un formulario y ese formulario es el que se va a encargar de solicitarle información al usuario.
Entonces vamos a escribir perform, en este caso le vamos a poner enc.
Aquí es muy importante distinguir este. Nosotros podemos crear un formulario y escribirlo,
pero pues bueno con las extensiones que ya hemos instalado antes, pues podemos poner
perform.enc.type y que precisamente lo estamos haciendo porque nosotros vamos a requerir
un formulario que pueda enviar archivos y es muy importante ponerle
enc.type.multipartform.data y pues en este caso lo vamos a enviar por un método POST. Este
formulario lo estamos preparando únicamente pues para solicitarle información al usuario.
(24:33 - 25:07)
Además de eso, pues vamos a poner lo que es un input. En este caso vamos a poner input y
vamos a buscar el input text que por ejemplo en este caso está aquí. Nosotros seleccionamos
este y de forma automática ya lo está generando.
Vamos a ponerle txtNombre y vamos a hacer una copia. Este txtNombre también se lo vamos a
poner en el ID. En el que ya hicimos la copia, pues le vamos a poner correo y este txtCorreo
también se lo vamos a poner en el ID.
(25:07 - 25:25)
Además de eso, pues vamos a generar otro que va a ser una foto. Entonces vamos a poner file
que va a ser input, dos puntos file y vamos a ponerle txtFoto. También vamos a ponerle como
ID txtFoto.
(25:26 - 28:33)
Ya tenemos esto y vamos a ponerles una etiqueta. Por ejemplo en este caso nada más le voy a
poner nombre, le voy a poner un br aquí y también le voy a poner el nombre de esta etiqueta
con el valor correo. Aquí estoy escribiendo simplemente correo, dos puntos.
También vamos a poner foto, dos puntos y le vamos a poner también un br para que pues se
pueda distinguir qué es diferente. Además de eso, pues vamos a poner también lo que es otro
br porque ahorita le vamos a crear un botón que nos va a servir para enviar información.
Independientemente de esto, tal vez va a salir un poco básico, pero pues la idea es que
nosotros podamos capturar información y enviarla.
Ya más adelante le vamos a poner lo que es la apariencia. Así que vamos a continuar y vamos a
poner lo que es el input aquí de tipo submit. En este caso vamos a poner input, dos puntos,
submit.
El valor va a ser agregar y nuevamente vamos a darle un br y pues ya tenemos lo que es
nuestro template. Ahora bien, cómo llamamos a nuestro template para que se muestre. Vamos
a hacer lo siguiente.
Antes nosotros ya habíamos creado lo que es una referencia con app route. Nosotros podemos
crear otra referencia que cuando el usuario escriba, por ejemplo, create, en este caso podemos
hacer que se acceda. Vamos a poner route, simplemente route y vamos a ver que las
extensiones que hemos utilizado también nos proporcionan esos fragmentos de código.
Por ejemplo, si nosotros escribimos route y le damos en enter, va a aparecer algo como esto.
Así que simplemente vamos a poner create, para que cuando el usuario escriba create, le
vamos a poner create y en este caso, en donde está escrito path, le vamos a poner return. ¿Te
acuerdas cómo se llamaba esto? Se llama render template.
¿Y aquí qué es lo que vamos a escribir? Acuérdate como lo hicimos anteriormente. Empleados,
que es el nombre de la carpeta, en este caso, y después le vamos a escribir create.html. Una vez
que ya tenemos esto, bueno, la forma de correrlo es simplemente poniendo 127.0.0.1 2.5000.
En este caso, si no lo sabes, vamos a terminal, vamos a poner python app.py. Si ya lo tienes
corriendo, pues no va a haber ningún problema, pero bueno, aquí está la url que debemos de
escribir nuevamente, y si ya lo tienes corriendo, es simplemente actualizarlo. Una vez que
nosotros ya entramos, vamos a escribir, en este caso, create, le damos en enter, y ya podemos
ver lo que es el formulario de creación, que nos va a servir para solicitar la información al
usuario y enviarlo directamente a la base de datos.
(28:34 - 29:06)
Vamos a continuar, y en este caso, lo que vamos a hacer es insertar toda la información que
viene directamente del formulario. Para continuar, pues vamos a incluir en la parte de arriba,
en donde está render template, la parte que dice request, o en este caso, el módulo que dice
request. Entonces vamos a poner request, y esto lo vamos a hacer porque toda la información
que se va a procesar a través de lo que es el html, va a ser un envío de información.
(29:06 - 29:27)
Entonces, todo este envío se va a manejar como request, que en este caso, sería prácticamente
una solicitud de información. Entonces, una vez que nosotros ya incluimos aquí lo que es el
request, utilizando flask, vamos a irnos en la parte de abajo. Nosotros ya hemos accedido
directamente a lo que es el template de create.
(29:28 - 29:56)
Entonces, create ya nos debe de enviar información. Aquí, en donde dice action, nosotros
vamos a decirle que toda esta información que está recolectando del usuario, la envíe a un
lugar, y lo vamos a hacer utilizando lo que es la url. Así que le voy a poner store, y esto significa
que todo lo que se va a escribir en este formulario, se va a enviar directamente a esta ruta.
(29:56 - 29:59)
Pero bueno, esta ruta no la conocemos.
This file is longer than 30 minutes.
Go Unlimited at TurboScribe.ai to transcribe files up to 10 hours long.