Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 16 additions & 19 deletions source/leccion2/dbapi.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Interfaz DB-API
===============

En Python, ofrece el acceso a :doc:`bases de datos relacionales <./base_datos_relacional>`
En Python, ofrece el acceso a :ref:`bases de datos relacionales <python_base_datos_relacional>`
estandarizado por la especificación Database API (DB-API), actualmente
en la versión 2.0 *(PEP 249: Python Database API Specification v2.0)*.

Expand Down Expand Up @@ -33,14 +33,14 @@ los siguientes pasos:
Importar el conector
--------------------

La forma más comunes de importar la librería de implementación DB-API
La forma más comunes de importar el módulo de implementación DB-API

.. code-block:: python
:class: no-copy

import databasepackage as base_datos

En general, la única método que se usa directamente en la librería
En general, la única método que se usa directamente en el módulo
es ``connect``, ya que la mayoría de las demás operaciones se realizan
en objetos devueltos después de llamar a ``this``.

Expand All @@ -60,11 +60,11 @@ la conexión y el cursor. Primero obtienes una conexión a una base de datos:
conexion = base_datos.connect()

Hay varias formas de especificar los parámetros de conexión de la base
de datos. Para la mayoría de las librerías, los valores predeterminados
de datos. Para la mayoría de los módulos, los valores predeterminados
para el método de conexión se conectarán a una base de datos instalada
localmente configurada de manera predeterminada.

Algunas bases de datos tienen sus propias opciones, como ``sqlite3`` tiene
Algunas bases de datos tienen sus propias opciones, como el módulo :ref:`sqlite3 <python_modulo_sqlite3>` tiene
la opción para una base de datos en memoria no persistente:

.. code-block:: python
Expand All @@ -86,9 +86,9 @@ transaccionales, consultas SQL y manipulación de datos.
cursor = conexion.cursor()

La mejor manera de usar la conexión y el cursor es desde los controladores
de recursos. La mayoría de las librerías de bases de datos admiten el manejo
de recursos. La mayoría de los módulos de bases de datos admiten el manejo
de recursos en la conexión, pero solo unas pocas lo admiten en el cursor.
Usando `with`_, tanto la conexión como el cursor se cierran después del uso.
Usando la sentencia :ref:`with <python_sent_with>`, tanto la conexión como el cursor se cierran después del uso.

.. code-block:: python

Expand All @@ -105,7 +105,7 @@ Usando `with`_, tanto la conexión como el cursor se cierran después del uso.
pass # Los comandos SQL van aquí

Si solo se admite el manejo de recursos de conexión, entonces el cursor
debe estar envuelto en un bloque de sentencias ``try`` / ``finally`` para
debe estar envuelto en un bloque de sentencias :ref:`try <python_sent_try_except>` / :ref:`finally <python_sent_finally>` para
garantizar que el cursor esté cerrado:

.. code-block:: python
Expand Down Expand Up @@ -137,12 +137,12 @@ Si no se admite el manejo de recursos de conexión, ambos tienen métodos
if cursor:
cursor.close()

Todas las librerías para bases de datos relacionales que soportan transacciones
Todas los módulos para bases de datos relacionales que soportan transacciones
iniciarán automáticamente una nueva cuando la primera declaración en un cursor
nuevo o inmediatamente después de una llamada al método ``commit()`` un cursor.
Todos los cursores en la conexión se ejecutarán dentro de esa transacción.

Si se utiliza `with`_ para el manejo de recursos, la transacción se confirmará
Si se utiliza la sentencia :ref:`with <python_sent_with>` para el manejo de recursos, la transacción se confirmará
al final del bloque. Si administra manualmente los recursos, esta transacción
debe confirmarse explícitamente antes de cerrar la conexión, o se revertirá
automáticamente.
Expand All @@ -160,10 +160,10 @@ El ``commit`` se realizan con el método del mismo nombre:
conexion.commit()

La confirmación automática también se puede habilitar configurando
``conexion.autocommit = True`` en la librería ``pyscopg2`` después de crear la
``conexion.autocommit = True`` en el módulo ``pyscopg2`` después de crear la
conexión pero antes de la primera ejecución.

El manejo de excepciones se puede hacer con la clase `Exception`_ genérica o con
El manejo de excepciones se puede hacer con la clase :ref:`Exception <python_exception>` genérica o con
las clases específicas para cada librería.


Expand Down Expand Up @@ -252,7 +252,7 @@ Se recomienda encarecidamente utilizar una de estas formas de sustitución en lu
una construcción o reemplazo directo de cadenas. Usar los operadores de formato integrados de
Python no es la forma correcta de hacer esto.

Solo se requiere que cada DB-API admita uno de estos, pero la mayoría de las librerías admiten
Solo se requiere que cada DB-API admita uno de estos, pero la mayoría de los módulos admiten
más de uno.

- ``sqlite3``: :ref:`qmark <python_dbapi_execute_qmark>`, :ref:`numeric <python_dbapi_execute_numeric>` y :ref:`named <python_dbapi_execute_named>`.
Expand Down Expand Up @@ -358,10 +358,10 @@ del cursor del conector a usado.
conexion.close()


Librerías más populares
-----------------------
Módulos más populares
---------------------

Las librerías de bases de datos relacionales más populares son:
Las módulos Python más populares para el manejo de bases de datos relacionales son:

- :ref:`sqlite3 <python_modulo_sqlite3>` para conexiones a *SQLite*.

Expand Down Expand Up @@ -396,10 +396,7 @@ Las librerías de bases de datos relacionales más populares son:
.. _`JDBC`: https://es.wikipedia.org/wiki/Java_Database_Connectivity
.. _`ODBC`: https://es.wikipedia.org/wiki/Open_Database_Connectivity
.. _`NoSQL`: https://es.wikipedia.org/wiki/NoSQL
.. _`with`: https://entrenamiento-python-basico.readthedocs.io/es/3.11/leccion9/errores.html#sentencia-with
.. _`Exception`: https://entrenamiento-python-basico.readthedocs.io/es/3.11/leccion9/exceptions.html#python-exception
.. _`DML`: https://es.wikipedia.org/wiki/Lenguaje_de_manipulaci%C3%B3n_de_datos
.. _`The Novice’s Guide to the Python 3 DB-API`: https://philvarner.github.io/pages/novice-python3-db-api.html
.. _`Acceso A Bases De Datos Desde Python - Interfaz Db-Api`: https://wiki.python.org.ar/dbapi/
.. _`cx_Oracle`: https://cx-oracle.readthedocs.io/en/latest/
.. _`pypyodbc`: https://pypi.org/project/pypyodbc/
Expand Down
153 changes: 120 additions & 33 deletions source/leccion2/mysql.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,42 +14,43 @@ MySQL

Logotipo de MySQL

`PyMySQL`_, es un paquete contiene una librería cliente MySQL puramente en Python,
basada en la especificación :ref:`PEP 249 <python_dbapi>`.
El módulo `PyMySQL`_, es el adaptador de base de datos ``MySQL`` para el lenguaje de
programación Python. Sus principales características son la implementación de la especificación
Python :ref:`DB-API 2.0 <python_dbapi>` y que esta desarrollado puramente en Python.

A diferencia de :ref:`SQLite <python_modulo_sqlite3>`, no hay un módulo Python SQL
predeterminado en la librería estándar de Python, que pueda usar para conectarse a una
base de datos ``MySQL``. En su lugar, deberá instalar un controlador Python SQL
para ``MySQL`` para poder interactuar con base de datos desde aplicaciones de Python.
A diferencia del módulo :ref:`SQLite <python_modulo_sqlite3>`, no hay un módulo Python SQL predeterminado en
la :ref:`librería estándar de Python <python_libreria_estandar>`, que pueda usar para conectarse a una
base de datos ``MySQL``. En su lugar, deberá instalar un módulo externor que funja como controlador
Python SQL para el servidor ``MySQL`` para poder interactuar con base de datos desde aplicaciones de
Python.

.. tip::
Es el adaptador de base de datos `MySQL`_ más popular para el lenguaje de programación *Python*.
Es un adaptador de base de datos `MySQL`_ para el lenguaje de programación *Python*.


.. _python_pymysql_instalar:

Instalación
-----------

Para conectarte al servidor ``MySQL`` necesita el paquete `PyMySQL`_. Esto
significa que debe instalar ``PyMySQL`` ejecutando los siguientes comandos correspondiente
a cada sistema operativo, los cuales se presentan a continuación:
Para conectarte al servidor ``MySQL`` necesita el módulo `PyMySQL`_. Esto significa que debe instalar
``PyMySQL`` ejecutando los siguientes comandos correspondiente a cada sistema operativo, los cuales se
presentan a continuación:

.. tabs::

.. group-tab:: Linux


Para trabajar una aplicación con bases de datos relacionales ``PostgreSQL`` requiere
instalar las siguientes librerías:
Para trabajar una aplicación con bases de datos relacionales ``MySQL`` requiere
instalar las siguientes librerías/módulos:

#. :ref:`Entorno de desarrollo <python_entorno_desarrollo>`.

#. :ref:`Python package installer - pip <python_entorno_desarrollo_pip>`.

#. :ref:`Entorno virtual Python <python_entorno_desarrollo_venv>`.

#. Paquete ``PyMySQL``, ejecutando el siguiente comando:
#. Instalar el módulo ``PyMySQL``, ejecutando el siguiente comando:

.. code-block:: console

Expand All @@ -61,7 +62,7 @@ a cada sistema operativo, los cuales se presentan a continuación:

#. :ref:`Entorno virtual Python <python_entorno_desarrollo_venv>`.

#. Instalar el paquete ``PyMySQL``, ejecutando el siguiente comando:
#. Instalar el módulo ``PyMySQL``, ejecutando el siguiente comando:

.. code-block:: console

Expand All @@ -87,14 +88,14 @@ el siguiente comando correspondiente a tu sistema operativo:
python3 -c "import pymysql ; print(pymysql.__version__)"


Si muestra el numero de la versión instalada de ``PyMySQL``, tiene correctamente instalada
la paquete. Con esto, ya tiene todo listo para continuar.
Si muestra el número de la versión instalada de ``PyMySQL``, tiene correctamente instalado
el módulo. Con esto, ya tiene todo listo para continuar.


.. _python_mysql_instalar:

Servidor MySQL
'''''''''''''''
^^^^^^^^^^^^^^

Para instalar el servidor ``MySQL`` existen varias formas de realizarlo, para en este caso
se realizara con la tecnología `Docker`_. Esto significa que debe instalar en tu sistema operativo:
Expand Down Expand Up @@ -126,21 +127,53 @@ Estructura de archivos

Para crear la estructura de archivos del proyecto ``MySQL`` debe ejecutar los siguientes comandos:

Crear el directorio ``~/proyectos/mysql/crud`` con el siguiente comando:
Crear el directorio ``crud`` con el siguiente comando:

.. code-block:: console
.. tabs::

.. group-tab:: Linux

mkdir -p ~/proyectos/mysql/crud && cd $_
Crear y acceder al directorio en un solo comando, ejecutando el siguiente comando:

.. code-block:: console

El comando anterior crea la siguiente estructura de directorios:
mkdir -p ~/proyectos/mysql/crud && cd $_

.. code-block:: console
:class: no-copy
El comando anterior crea la siguiente estructura de directorios:

.. code-block:: console
:class: no-copy

proyectos/
└── mysql/
└── crud/

.. group-tab:: Windows

Para realiar esta practica debe crear la estructura de archivos del proyecto, ejecute el
siguiente comando:

Debe crear el directorio ``crud``, ejecutando el siguiente comando:

.. code-block:: console

md .\proyectos\mysql\crud

Debe acceder al directorio , ejecutando el siguiente comando:

.. code-block:: console

cd .\proyectos\mysql\crud

El comando anterior crea la siguiente estructura de directorios:

.. code-block:: console
:class: no-copy

proyectos/
└── mysql/
└── crud/

proyectos/
└── mysql/
└── crud/

Si tiene la estructura de archivo previa, entonces puede continuar con la siguiente sección.

Expand Down Expand Up @@ -191,7 +224,7 @@ para una base de datos ``MySQL``:

El ejemplo anterior se describe a continuación:

- En la línea 1, se importa la librería ``pymysql``.
- En la línea 1, se importa el módulo ``pymysql``.

- En la línea 3, se define en la constante ``USER``, del usuario de conexión a la base de datos.

Expand Down Expand Up @@ -518,8 +551,62 @@ Práctica - Caso real
--------------------

A continuación se presenta una práctica más real de implementar el uso de proyectos
con ``MySQL``, a continuación la estructura de proyecto llamado ``mysql``:
con ``MySQL`` en Python:


Estructura de archivos
^^^^^^^^^^^^^^^^^^^^^^

Para crear la estructura de archivos del proyecto ``MySQL`` debe ejecutar los siguientes comandos:

.. tabs::

.. group-tab:: Linux

Crear y acceder al directorio ``sistema`` en un solo comando, ejecutando el siguiente comando:

.. code-block:: console

mkdir -p ~/proyectos/mysql/sistema && cd $_

El comando anterior crea la siguiente estructura de directorios:

.. code-block:: console
:class: no-copy

proyectos/
└── mysql/
└── sistema/

Si tiene la estructura de archivo previa, entonces puede continuar con la siguiente sección.

.. group-tab:: Windows

Para realiar esta practica debe crear la estructura de archivos del proyecto, ejecute el
siguiente comando:

Debe crear el directorio ``sistema``, ejecutando el siguiente comando:

.. code-block:: console

md .\proyectos\mysql\sistema

Debe acceder al directorio , ejecutando el siguiente comando:

.. code-block:: console

cd .\proyectos\mysql\sistema

El comando anterior crea la siguiente estructura de directorios:

.. code-block:: console
:class: no-copy

proyectos/
└── mysql/
└── sistema/

Si tiene la estructura de archivo previa, entonces puede continuar con la siguiente sección.

A continuación se presenta y explica el uso de cada archivo para este proyecto:

Expand Down Expand Up @@ -628,7 +715,7 @@ configuración y ejecución del código fuente.

.. tip::
Para ejecutar el comando del instalador del servidor ``MySQL`` con `Docker`_ debe crear
un archivo llamado :file:`docker-compose.yml` en el directorio ``sistema/`` con el contenido
un archivo llamado :file:`docker-compose.yml` en el directorio ``sistema`` con el contenido
anterior de dicho archivo, ejecutando el siguiente comando:

.. code-block:: console
Expand Down Expand Up @@ -661,7 +748,7 @@ configuración y ejecución del código fuente.

INFO:root:✅ ¡Conexión a la base de datos 'sistema' fue exitosa!

INFO:root:✅ ¡Fueron creado(s) 0 tabla(s) correctamente en la base de datos!
INFO:root:✅ ¡Fueron creado(s) 1 tabla(s) correctamente en la base de datos!

INFO:root:✅ ¡Fueron insertado(s) 3 registro(s) correctamente en la tabla!

Expand Down Expand Up @@ -726,7 +813,7 @@ configuración y ejecución del código fuente.

.. tip::
Para ejecutar el comando del instalador del servidor ``MySQL`` con `Docker`_ debe crear
un archivo llamado :file:`docker-compose.yml` en el directorio ``sistema/`` con el contenido
un archivo llamado :file:`docker-compose.yml` en el directorio ``sistema`` con el contenido
anterior, ejecutando el siguiente comando:

.. code-block:: console
Expand Down Expand Up @@ -759,7 +846,7 @@ configuración y ejecución del código fuente.

INFO:root:✅ ¡Conexión a la base de datos 'sistema' fue exitosa!

INFO:root:✅ ¡Fueron creado(s) 0 tabla(s) correctamente en la base de datos!
INFO:root:✅ ¡Fueron creado(s) 1 tabla(s) correctamente en la base de datos!

INFO:root:✅ ¡Fueron insertado(s) 3 registro(s) correctamente en la tabla!

Expand Down
4 changes: 2 additions & 2 deletions source/leccion2/pickle.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ Python ofrece tres módulos diferentes en la biblioteca estándar que le permite

.. _python_modulo_pickle:

Librería pickle
----------------
Módulo pickle
-------------

El módulo `pickle`_ implementa protocolos binarios para **serializar** y **deserializar**
una estructura de objetos Python.
Expand Down
Loading