diff --git a/source/leccion2/dbapi.rst b/source/leccion2/dbapi.rst index c4c60c3..e1a4e8c 100644 --- a/source/leccion2/dbapi.rst +++ b/source/leccion2/dbapi.rst @@ -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 ` estandarizado por la especificación Database API (DB-API), actualmente en la versión 2.0 *(PEP 249: Python Database API Specification v2.0)*. @@ -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``. @@ -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 ` tiene la opción para una base de datos en memoria no persistente: .. code-block:: python @@ -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 `, tanto la conexión como el cursor se cierran después del uso. .. code-block:: python @@ -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 ` / :ref:`finally ` para garantizar que el cursor esté cerrado: .. code-block:: python @@ -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 ` 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. @@ -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 ` genérica o con las clases específicas para cada librería. @@ -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 `, :ref:`numeric ` y :ref:`named `. @@ -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 ` para conexiones a *SQLite*. @@ -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/ diff --git a/source/leccion2/mysql.rst b/source/leccion2/mysql.rst index f6e6602..63377da 100644 --- a/source/leccion2/mysql.rst +++ b/source/leccion2/mysql.rst @@ -14,16 +14,18 @@ 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 `. +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 ` y que esta desarrollado puramente en Python. -A diferencia de :ref:`SQLite `, 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 `, no hay un módulo Python SQL predeterminado en +la :ref:`librería estándar de Python `, 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: @@ -31,17 +33,16 @@ para ``MySQL`` para poder interactuar con base de datos desde aplicaciones de Py 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 `. @@ -49,7 +50,7 @@ a cada sistema operativo, los cuales se presentan a continuación: #. :ref:`Entorno virtual Python `. - #. Paquete ``PyMySQL``, ejecutando el siguiente comando: + #. Instalar el módulo ``PyMySQL``, ejecutando el siguiente comando: .. code-block:: console @@ -61,7 +62,7 @@ a cada sistema operativo, los cuales se presentan a continuación: #. :ref:`Entorno virtual Python `. - #. Instalar el paquete ``PyMySQL``, ejecutando el siguiente comando: + #. Instalar el módulo ``PyMySQL``, ejecutando el siguiente comando: .. code-block:: console @@ -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: @@ -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. @@ -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. @@ -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: @@ -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 @@ -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! @@ -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 @@ -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! diff --git a/source/leccion2/pickle.rst b/source/leccion2/pickle.rst index c82399c..7bd34ae 100644 --- a/source/leccion2/pickle.rst +++ b/source/leccion2/pickle.rst @@ -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. diff --git a/source/leccion2/postgresql.rst b/source/leccion2/postgresql.rst index 9b0e967..fe10c48 100644 --- a/source/leccion2/postgresql.rst +++ b/source/leccion2/postgresql.rst @@ -14,26 +14,26 @@ PostgreSQL Logotipo de PostgreSQL -`psycopg`_, es el adaptador de base de datos PostgreSQL más popular para el lenguaje -de programación Python. Sus principales características son la implementación completa -de la especificación Python :ref:`DB-API 2.0 ` y la seguridad de -sub-procesos (varios sub-procesos pueden compartir la misma conexión). - -Al igual del paquete :ref:`PyMySQL `, 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 ``PostgreSQL``. En su lugar, deberá instalar un controlador Python SQL -para ``PostgreSQL`` para poder interactuar con base de datos desde aplicaciones de Python. - -Fue diseñado para aplicaciones con múltiples sub-procesos que crean y destruyen muchos -cursores y hacen una gran cantidad de ":ref:`INSERT `" -o ":ref:`UPDATE `" simultáneos. - -`psycopg`_ se implementa principalmente en C como un envoltorio de `libpq`_, lo que -resulta en que sea eficiente y seguro. Cuenta con cursores del lado del cliente y del lado -del servidor, comunicación asíncrona y notificaciones, compatibilidad con sentencias ``COPY``. -Muchos tipos de Python son compatibles de forma inmediata y están adaptados para coincidir -con los tipos de datos de ``PostgreSQL``; la adaptación se puede ampliar y personalizar gracias -a un sistema flexible de adaptación de objetos. +El módulo `psycopg`_, es el adaptador de base de datos ``PostgreSQL`` más popular para el lenguaje de +programación Python. Sus principales características son la implementación completa de la especificación +Python :ref:`DB-API 2.0 ` y la seguridad de sub-procesos (varios sub-procesos pueden +compartir la misma conexión). + +Al igual que el módulo :ref:`PyMySQL `, no hay un módulo Python SQL predeterminado en +la :ref:`librería estándar de Python `, que pueda usar para conectarse a una +base de datos ``PostgreSQL``. En su lugar, deberá instalar un módulo externor que funja como controlador +Python SQL para el servidor ``PostgreSQL`` para poder interactuar con base de datos desde aplicaciones de +Python. + +Fue diseñado para aplicaciones con múltiples sub-procesos que crean y destruyen muchos cursores y hacen una +gran cantidad de ":ref:`INSERT `" o ":ref:`UPDATE `" \ +simultáneos. + +Este módulo se implementa principalmente en C como un envoltorio de `libpq`_, lo que resulta en que sea +eficiente y seguro. Cuenta con cursores del lado del cliente y del lado del servidor, comunicación asíncrona +y notificaciones, compatibilidad con sentencias ``COPY``. Muchos tipos de Python son compatibles de forma +inmediata y están adaptados para coincidir con los tipos de datos de ``PostgreSQL``; la adaptación se puede +ampliar y personalizar gracias a un sistema flexible de adaptación de objetos. .. tip:: Es el adaptador de base de datos `PostgreSQL`_ más popular para el lenguaje de programación *Python*. @@ -44,17 +44,16 @@ a un sistema flexible de adaptación de objetos. Instalación ----------- -Para conectarte al servidor ``PostgreSQL`` necesita el paquete `psycopg2`_. Esto -significa que debe instalar ``psycopg2`` ejecutando los siguientes comandos correspondiente -a cada sistema operativo, los cuales se presentan a continuación: +Para conectarte al servidor ``PostgreSQL`` necesita el módulo `psycopg2`_. Esto significa que debe instalar +``psycopg2`` 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: + instalar las siguientes librerías/módulos: #. :ref:`Entorno de desarrollo `. @@ -62,13 +61,13 @@ a cada sistema operativo, los cuales se presentan a continuación: #. :ref:`Entorno virtual Python `. - #. Dependencias de desarrollo del paquete ``psycopg2``, ejecutando el siguiente comando: + #. Dependencias de desarrollo del módulo ``psycopg2``, ejecutando el siguiente comando: .. code-block:: console sudo apt install -y libpq-dev postgresql-client-common postgresql-client - #. Instalar el paquete ``psycopg2``, ejecutando el siguiente comando: + #. Instalar el módulo ``psycopg2``, ejecutando el siguiente comando: .. code-block:: console @@ -80,7 +79,7 @@ a cada sistema operativo, los cuales se presentan a continuación: #. :ref:`Entorno virtual Python `. - #. Instalar el paquete ``psycopg2``, ejecutando el siguiente comando: + #. Instalar el módulo ``psycopg2``, ejecutando el siguiente comando: .. code-block:: console @@ -106,8 +105,8 @@ el siguiente comando correspondiente a tu sistema operativo: python3 -c "import psycopg2 ; print(psycopg2.__version__)" -Si muestra el número de la versión instalada de ``psycopg2``, tiene correctamente instalada -la paquete. Con esto, ya tiene todo listo para continuar. +Si muestra el número de la versión instalada de ``psycopg2``, tiene correctamente instalado +el módulo. Con esto, ya tiene todo listo para continuar. .. _python_postgresql_instalar: @@ -165,21 +164,53 @@ Estructura de archivos Para crear la estructura de archivos del proyecto ``PostgreSQL`` debe ejecutar los siguientes comandos: -Crear el directorio ``~/proyectos/postgresql/crud`` con el siguiente comando: +Crear el directorio ``crud`` con el siguiente comando: -.. code-block:: console +.. tabs:: + + .. group-tab:: Linux - mkdir -p ~/proyectos/postgresql/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/postgresql/crud && cd $_ -.. code-block:: console - :class: no-copy + El comando anterior crea la siguiente estructura de directorios: + + .. code-block:: console + :class: no-copy + + proyectos/ + └── postgresql/ + └── 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\postgresql\crud + + Debe acceder al directorio , ejecutando el siguiente comando: + + .. code-block:: console + + cd .\proyectos\postgresql\crud + + El comando anterior crea la siguiente estructura de directorios: + + .. code-block:: console + :class: no-copy + + proyectos/ + └── postgresql/ + └── crud/ - proyectos/ - └── postgresql/ - └── crud/ Si tiene la estructura de archivo previa, entonces puede continuar con la siguiente sección. @@ -230,7 +261,7 @@ para una base de datos ``PostgreSQL``: El ejemplo anterior se describe a continuación: -- En la línea 1, se importa la librería ``psycopg2``. +- En la línea 1, se importa el módulo ``psycopg2``. - En la línea 3, se define en la constante ``USER``, del usuario de conexión a la base de datos. @@ -557,8 +588,62 @@ Práctica - Caso real -------------------- A continuación se presenta una práctica más real de implementar el uso de proyectos -con ``PostgreSQL``, a continuación la estructura de proyecto llamado ``postgresql``: +con ``PostgreSQL`` en Python: + + +Estructura de archivos +^^^^^^^^^^^^^^^^^^^^^^ + +Para crear la estructura de archivos del proyecto ``PostgreSQL`` 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/postgresql/sistema && cd $_ + + El comando anterior crea la siguiente estructura de directorios: + + .. code-block:: console + :class: no-copy + + proyectos/ + └── postgresql/ + └── 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\postgresql\sistema + + Debe acceder al directorio , ejecutando el siguiente comando: + + .. code-block:: console + + cd .\proyectos\postgresql\sistema + + El comando anterior crea la siguiente estructura de directorios: + + .. code-block:: console + :class: no-copy + + proyectos/ + └── postgresql/ + └── 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: @@ -667,7 +752,7 @@ configuración y ejecución del código fuente. .. tip:: Para ejecutar el comando del instalador del servidor ``PostgreSQL`` 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 @@ -700,7 +785,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) -1 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! @@ -765,7 +850,7 @@ configuración y ejecución del código fuente. .. tip:: Para ejecutar el comando del instalador del servidor ``PostgreSQL`` 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 @@ -798,7 +883,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) -1 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! @@ -893,7 +978,7 @@ en una base de datos ``PostgreSQL``, aplicando buenas prácticas de código func .. _`PostgreSQL`: https://www.postgresql.org/ -.. _`psycopg`: https://www.psycopg.org/docs/ +.. _`psycopg`: https://www.psycopg.org/ .. _`psycopg2`: https://pypi.org/project/psycopg2/ .. _`libpq`: https://www.postgresql.org/docs/current/libpq.html .. _`dotenv`: https://dev.to/emma_donery/python-dotenv-keep-your-secrets-safe-4ocn diff --git a/source/leccion2/sqlacodegen.rst b/source/leccion2/sqlacodegen.rst index f0dd6c7..cff2bff 100644 --- a/source/leccion2/sqlacodegen.rst +++ b/source/leccion2/sqlacodegen.rst @@ -34,7 +34,7 @@ Características Instalación ----------- -Para instalar la librería ``sqlacodegen`` debe seguir el siguientes paso, el cual +Para instalar la herramienta ``sqlacodegen`` debe seguir el siguientes paso, el cual a continuación se presentan el correspondiente comando de tu sistema operativo: .. tabs:: @@ -73,7 +73,7 @@ comando correspondiente a tu sistema operativo: Si muestra el nombre del paquete como ``sqlacodegen``, tiene correctamente instalada -la librería. Con esto, ya tiene todo listo para continuar. +la herramienta. Con esto, ya tiene todo listo para continuar. ---- @@ -111,12 +111,12 @@ Conexión al Engine ------------------ Luego configura el :ref:`engine ` (cadena de conexión) -para la DB respectiva. Para esto se explican algunas configuraciones, para SQLite, +para la DB respectiva. Para esto se explican algunas configuraciones, para :ref:`SQLite `, :ref:`MySQL ` y :ref:`PostgreSQL ` a continuación: .. tip:: - Cada cadena de conexión necesita que se instale la librería dependiente. + Cada cadena de conexión necesita que se instale el módulo dependiente. .. _python_sqlacodegen_sqlite: @@ -160,9 +160,9 @@ los cuales deben ser reemplazadas con sus propios datos en la línea de comando :command:`sqlacodegen`. .. tip:: - Para conectarte al servidor ``MySQL`` necesite el paquete :ref:`PyMySQL `. + Para conectarte al servidor ``MySQL`` necesite el módulo :ref:`PyMySQL `. -Luego ya teniendo instalado el paquete ``PyMySQL`` debe ejecutar el siguiente comando +Luego ya teniendo instalado el módulo ``PyMySQL`` debe ejecutar el siguiente comando de ``sqlacodegen``, los parámetros deben ser reemplazadas con sus propios datos en la línea de comando: @@ -198,9 +198,9 @@ los cuales deben ser reemplazadas con sus propios datos en la línea de comando :command:`sqlacodegen`. .. tip:: - Para conectarte al servidor ``PostgreSQL`` necesite el paquete :ref:`psycopg2 `. + Para conectarte al servidor ``PostgreSQL`` necesite el módulo :ref:`psycopg2 `. -Luego ya teniendo instalado el paquete ``psycopg2`` debe ejecutar el siguiente comando +Luego ya teniendo instalado el módulo ``psycopg2`` debe ejecutar el siguiente comando de ``sqlacodegen``, los parámetros deben ser reemplazadas con sus propios datos en la línea de comando: diff --git a/source/leccion2/sqlite.rst b/source/leccion2/sqlite.rst index db36906..973b66e 100644 --- a/source/leccion2/sqlite.rst +++ b/source/leccion2/sqlite.rst @@ -28,7 +28,7 @@ datos más grande como :ref:`PostgreSQL ` u `Oracle `, puede probar la instalación existe, ejecutando el siguiente comando: .. tabs:: @@ -45,9 +45,10 @@ instalación existe, ejecutando el siguiente comando: python3 -c "import sqlite3 ; print(sqlite3.__package__)" -Si muestra el nombre del paquete ``sqlite3``, tiene instalado la librería. +Si muestra el nombre del módulo ``sqlite3``, tiene correctamente instalado el módulo. +Con esto, ya tiene todo listo para continuar. -Adicionalmente puedes instalar administradores de base de datos SQLite nativos para sistemas +Adicionalmente puedes instalar administradores de base de datos ``SQLite`` nativos para sistemas operativos Linux y Windows, a continuación se presentan alternativas: @@ -94,7 +95,7 @@ los modos de instalación: Use ".open FILENAME" to reopen on a persistent database. sqlite> - Si muestra la consola SQLite ``sqlite>``, tiene correctamente instalada el administrador + Si muestra la consola SQLite ``sqlite>``, tiene correctamente instalado el administrador de base de datos nativa ``sqlite3`` por línea de comando. .. note:: @@ -258,8 +259,8 @@ los modos de instalación: DB Browser for SQLite en Linux - Si muestra la interfaz gráfica de ``sqlitebrowser``, tiene correctamente instalada el administrador - de base de datos nativo de ``sqlite3``. + Si muestra la interfaz gráfica de ``sqlitebrowser``, tiene correctamente instalado el administrador + de base de datos gráfico nativo de ``sqlite3``. .. group-tab:: Windows @@ -291,21 +292,53 @@ Estructura de archivos Para crear la estructura de archivos del proyecto ``SQLite`` debe ejecutar los siguientes comandos: -Crear el directorio ``~/proyectos/sqlite/crud`` con el siguiente comando: +Crear el directorio ``crud`` con el siguiente comando: -.. code-block:: console +.. tabs:: + + .. group-tab:: Linux + + Crear y acceder al directorio en un solo comando, ejecutando el siguiente comando: + + .. code-block:: console + + mkdir -p ~/proyectos/sqlite/crud && cd $_ + + El comando anterior crea la siguiente estructura de directorios: + + .. code-block:: console + :class: no-copy + + proyectos/ + └── sqlite/ + └── crud/ - mkdir -p ~/proyectos/sqlite/crud && cd $_ + .. 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\sqlite\crud + + Debe acceder al directorio , ejecutando el siguiente comando: + .. code-block:: console + + cd .\proyectos\sqlite\crud -El comando anterior crea la siguiente estructura de directorios: + El comando anterior crea la siguiente estructura de directorios: -.. code-block:: console - :class: no-copy + .. code-block:: console + :class: no-copy + + proyectos/ + └── sqlite/ + └── crud/ - proyectos/ - └── sqlite/ - └── crud/ Si tiene la estructura de archivo previa, entonces puede continuar con la siguiente sección. @@ -318,8 +351,8 @@ Si tiene la estructura de archivo previa, entonces puede continuar con la siguie Cadenas de conexión ------------------- -Para definir el método ``connect`` debe definir las cadenas de conexión con -``SQLite`` como se describe a continuación: +Para definir el método ``connect`` debe definir las cadenas de conexión con ``SQLite`` +como se describe a continuación: ``DB_PATH`` Ruta absoluta o relativa del archivo de base de datos ``SQLite``. @@ -344,9 +377,9 @@ para una base de datos ``SQLite``: El ejemplo anterior se describe a continuación: -- En la línea 1, se importa la librería ``os`` de la librería estándar Python. +- En la línea 1, se importa el módulo ``os`` de la :ref:`librería estándar de Python `. -- En la línea 2, se importa la librería ``sqlite3`` de la librería estándar Python. +- En la línea 2, se importa el módulo ``sqlite3`` de la :ref:`librería estándar de Python `. - En la línea 4, se define en la constante ``DB_PATH`` la ruta absoluta usada para guardar la base de datos. diff --git a/source/leccion2/zodb.rst b/source/leccion2/zodb.rst index 1c4ef6a..5898d90 100644 --- a/source/leccion2/zodb.rst +++ b/source/leccion2/zodb.rst @@ -202,9 +202,9 @@ veremos más adelante en este documento, abre muchas posibilidades. Instalación ----------- -Para conectarte a una ``ZODB`` necesita el paquete `ZODB`_. Esto -significa que debe instalar ``ZODB`` ejecutando el siguiente comando, el cual -a continuación se presentan el correspondiente comando de tu sistema operativo: +Para conectarte hacia una ``ZODB`` necesita la librería `ZODB`_. Esto significa que debe instalar +``ZODB`` ejecutando el siguiente comando correspondiente a cada sistema operativo, el cual se +presentan a continuación: .. tabs:: @@ -239,7 +239,7 @@ el siguiente comando correspondiente a tu sistema operativo: Si muestra el nombre del paquete ``ZODB`` en la terminal, tiene -correctamente instalada la paquete. Con esto, ya tiene todo listo para continuar. +correctamente instalada la librería. Con esto, ya tiene todo listo para continuar. Adicionalmente puedes instalar un cliente de base de datos ZODB, a continuación se presentan alternativas: @@ -305,8 +305,8 @@ el siguiente comando: --debug enable debug logging --rw open the database read-write (default: read-only) - Si tiene disponibles el comando ``zodbbrowser``, tiene correctamente instalada el cliente - de base de datos nativa ``ZODB`` por linea de comando. + Si tiene disponibles el comando :command:`zodbbrowser`, tiene correctamente instalado el cliente + de base de datos gráfico nativo de ``ZODB``. .. note:: @@ -339,14 +339,14 @@ el siguiente comando: --debug enable debug logging --rw open the database read-write (default: read-only) - Si tiene disponibles el comando ``zodbbrowser``, tiene correctamente instalada el cliente - de base de datos nativa ``ZODB`` por linea de comando. + Si tiene disponibles el comando :command:`zodbbrowser`, tiene correctamente instalado el cliente + de base de datos gráfico nativo de ``ZODB``. .. note:: Más información consulte https://pypi.org/project/zodbbrowser/ -Ejecute el comando ``zodbrowser`` especificando un nombre de archivo ZODB, ejecutando el siguiente comando: +Ejecute el comando :command:`zodbrowser` especificando un nombre de archivo ``ZODB``, ejecutando el siguiente comando: .. tabs:: @@ -383,8 +383,8 @@ a continuación: ZODB browser -Si muestra la interfaz gráfica de ``zodbbrowser``, tiene correctamente instalada el cliente -de base de datos ``ZODB``. +Si muestra la interfaz gráfica de ``zodbbrowser``, tiene correctamente instalado el cliente +de base de datos gráfico nativo de ``ZODB``. ---- @@ -426,15 +426,15 @@ para una base de datos ``ZODB``: El ejemplo anterior se describe a continuación: -- En la linea 1, se importa la librería ``os`` de la librería estándar Python. +- En la línea 1, se importa el módulo ``os`` de la :ref:`librería estándar de Python `. -- En la linea 2, se importa la librería ``ZODB`` de la librería estándar Python. +- En la línea 2, se importa el módulo ``ZODB``. -- En la linea 4, se define en la constante ``DB_PATH`` la ruta absoluta usada para guardar la base de datos. +- En la línea 4, se define en la constante ``DB_PATH`` la ruta absoluta usada para guardar la base de datos. -- En la linea 5, se define en la constante ``DB_FILE`` el nombre de la base de datos. +- En la línea 5, se define en la constante ``DB_FILE`` el nombre de la base de datos. -- En la linea 6, se define en la constante ``DB`` la ruta completa usada para leer la base de datos. +- En la línea 6, se define en la constante ``DB`` la ruta completa usada para leer la base de datos. De esta forma se crea una cadena de conexión para ``ZODB`` para ser usada por el método ``open``. @@ -728,17 +728,19 @@ A continuación se presenta una práctica más real de implementar el uso de pro con ``ZODB``, a continuación la estructura de proyecto llamado ``sistema``: .. code-block:: console + :class: no-copy - zodb/ - └── sistema/ - ├── classes/ - │ ├── __init__.py - │ ├── cliente.py - │ └── producto.py - ├── __init__.py - ├── main.py - ├── requirements.txt - └── settings.py + proyectos/ + └── zodb/ + └── sistema/ + ├── classes/ + │ ├── __init__.py + │ ├── cliente.py + │ └── producto.py + ├── __init__.py + ├── main.py + ├── requirements.txt + └── settings.py A continuación se presenta y explica el uso de cada archivo para este proyecto: @@ -800,7 +802,7 @@ sistema operativo: pip3 install -r requirements.txt .. tip:: - Para ejecutar el código fuente de esta practica debe invocar al Módulo :file:`main.py`, + Para ejecutar el código fuente de esta práctica debe invocar al módulo :file:`main.py`, abra una consola de comando, acceda al directorio donde se encuentra la estructura previa y ejecute el siguiente comando: @@ -849,22 +851,24 @@ sistema operativo: La ejecucion anterior generar la siguiente estructura: .. code-block:: console + :class: no-copy - zodb/ - └── sistema/ - ├── classes/ - │ ├── __init__.py - │ ├── cliente.py - │ └── producto.py - ├── filestorage/ - │ ├── inventario.fs - │ ├── inventario.fs.index - │ ├── inventario.fs.lock - │ └── inventario.fs.tmp - ├── __init__.py - ├── main.py - ├── requirements.txt - └── settings.py + proyectos/ + └── zodb/ + └── sistema/ + ├── classes/ + │ ├── __init__.py + │ ├── cliente.py + │ └── producto.py + ├── filestorage/ + │ ├── inventario.fs + │ ├── inventario.fs.index + │ ├── inventario.fs.lock + │ └── inventario.fs.tmp + ├── __init__.py + ├── main.py + ├── requirements.txt + └── settings.py .. group-tab:: Windows @@ -875,7 +879,7 @@ sistema operativo: pip3 install -r requirements.txt .. tip:: - Para ejecutar el código fuente de esta practica debe invocar al Módulo :file:`main.py`, + Para ejecutar el código fuente de esta práctica debe invocar al módulo :file:`main.py`, abra una consola de comando, acceda al directorio donde se encuentra la estructura previa y ejecute el siguiente comando: @@ -916,22 +920,24 @@ sistema operativo: La ejecucion anterior generar la siguiente estructura: .. code-block:: console + :class: no-copy - zodb/ - └── sistema/ - ├── classes/ - │ ├── __init__.py - │ ├── cliente.py - │ └── producto.py - ├── filestorage/ - │ ├── inventario.fs - │ ├── inventario.fs.index - │ ├── inventario.fs.lock - │ └── inventario.fs.tmp - ├── __init__.py - ├── main.py - ├── requirements.txt - └── settings.py + proyectos/ + └── zodb/ + └── sistema/ + ├── classes/ + │ ├── __init__.py + │ ├── cliente.py + │ └── producto.py + ├── filestorage/ + │ ├── inventario.fs + │ ├── inventario.fs.index + │ ├── inventario.fs.lock + │ └── inventario.fs.tmp + ├── __init__.py + ├── main.py + ├── requirements.txt + └── settings.py Asi de esta forma puede ingresar, consultar, actualizar y eliminar registro en un archivo serializado de objetos python ``ZODB``. diff --git a/source/lecturas.rst b/source/lecturas.rst index 5a84d50..462f398 100644 --- a/source/lecturas.rst +++ b/source/lecturas.rst @@ -66,8 +66,8 @@ Lección 2 - Persistencia de datos - `Persistencia e intercambio de datos `_. -Librería pickle -^^^^^^^^^^^^^^^ +Módulo pickle +^^^^^^^^^^^^^ - `pickle - Serialización de objetos Python `_. @@ -76,15 +76,17 @@ Librería pickle - `Python: Serialización de objetos `_. -ZODB -^^^^ +Librería ZODB +^^^^^^^^^^^^^ - `ZODB - a native object database for Python `_. -- `ZODB · PyPI `_. +- `ZODB, a Python object-oriented database - PyPI `_. - `ZODB · Python object-oriented database `_. +- `ZODB browser - PyPI `_. + Base de datos relacional ^^^^^^^^^^^^^^^^^^^^^^^^ @@ -112,8 +114,8 @@ Interfaz DB-API - `Databases - The Hitchhiker's Guide to Python `_. -Librería sqlite3 -^^^^^^^^^^^^^^^^ +Módulo sqlite3 +^^^^^^^^^^^^^^ - `sqlite3 — DB-API 2.0 interfaz para bases de datos SQLite `_. @@ -124,14 +126,22 @@ Librería sqlite3 - `How To Use the sqlite3 Module in Python 3 `_. -Librería psycopg -^^^^^^^^^^^^^^^^ +Módulo psycopg +^^^^^^^^^^^^^^ - `Psycopg - PostgreSQL database adapter for Python — Psycopg 2.9.9 documentation `_. - `psycopg - PostgreSQL database adapter for Python - PyPI `_. +Módulo PyMySQL +^^^^^^^^^^^^^^ + +- `PyMySQL - PostgreSQL database adapter for Python - PyPI `_. + +- `MySQL `_. + + Librería SQLAlchemy ^^^^^^^^^^^^^^^^^^^ @@ -142,8 +152,8 @@ Librería SQLAlchemy - `Patrón de diseño ORM `_. -Librería sqlacodegen -^^^^^^^^^^^^^^^^^^^^ +Autogenerar modelos SQLAlchemy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - `sqlacodegen, Automatic model code generator for SQLAlchemy - PyPI `_.