Todo lo que necesita saber sobre Python y mapas relacionales de objetos

Todo lo que necesita saber sobre Python y mapas relacionales de objetos

Es posible que haya oído hablar del mapeo relacional de objetos (ORM). Es posible que incluso haya usado uno, pero ¿qué son exactamente? ¿Y cómo los usas en Python?





Aquí encontrará todo lo que necesita saber sobre ORM y Python.





¿Qué es un ORM?

El mapeo relacional de objetos (ORM) es una técnica de programación utilizada para acceder a una base de datos. Expone su base de datos en una serie de objetos. No tiene que escribir comandos SQL para insertar o recuperar datos, usa una serie de atributos y métodos adjuntos a los objetos.





Puede parecer complejo e innecesario, pero pueden ahorrarle mucho tiempo y ayudar a controlar el acceso a su base de datos.

He aquí un ejemplo. Diga que cada vez que inserta una contraseña en su base de datos desea aplicar un hash, como se explica en Seguridad de la contraseña del sitio web. Esto no es un problema para casos de uso simples, usted hace el cálculo antes de insertar. Pero, ¿qué sucede si necesita insertar un registro en muchos lugares del código? ¿Qué pasa si otro programador inserta en su tabla y usted no lo sabe?



Mediante el uso de un ORM, puede escribir código para asegurarse de que cuando y donde sea que se acceda a cualquier fila o campo en su base de datos, su otro código personalizado se ejecute primero.

Esto también actúa como una 'fuente única de verdad'. Si desea cambiar un cálculo personalizado, solo tiene que cambiarlo en un lugar, no en varios. Es posible realizar muchos de estos principios con programación orientada a objetos (OOP) en Python , pero los ORM funcionan en conjunto con los principios de OOP para controlar el acceso a una base de datos.





Hay ciertas cosas a tener en cuenta al usar un ORM, y hay circunstancias en las que es posible que no desee usar uno, pero generalmente se considera que es bueno tenerlas, especialmente en una base de código grande.

ORM en Python usando SQLAlchemy

Como muchas tareas en Python, es más rápido y fácil importar un módulo que escribir uno propio. Por supuesto, es posible escribir su propio ORM, pero ¿por qué reinventar la rueda?





Los siguientes ejemplos usan todos SQLAlchemy , un popular ORM de Python, pero muchos de los principios se aplican independientemente de la implementación.

Configuración de Python para SQLAlchemy

Antes de saltar, necesitará configurar su máquina para el desarrollo de Python con SQLAlchemy.

Deberá usar Python 3.6 para seguir estos ejemplos. Si bien las versiones anteriores funcionarán, el código a continuación necesitará algunas modificaciones antes de que se ejecute. ¿No estás seguro de las diferencias? Nuestras preguntas frecuentes sobre Python cubren todas las diferencias.

Antes de codificar, debe configurar un entorno Python, que evitará problemas con otros paquetes Python importados.

Asegúrate de tener PIP, el administrador de paquetes de Python instalado, que viene con la mayoría de las versiones modernas de Python.

Una vez que esté listo para comenzar, puede comenzar preparando SQLAlchemy. Desde dentro de su entorno Python en la línea de comandos, instale SQLAlchemy con el instalación de pip mando:

|_+_|

los 1.2.9 es el número de versión. Puede dejar esto para obtener el paquete más reciente, pero es una buena práctica ser específico. No sabe cuándo una nueva versión puede romper su código actual.

Ahora está listo para comenzar a codificar. Es posible que deba preparar su base de datos para aceptar una conexión Python, pero todos los ejemplos siguientes usan un SQLite base de datos creada en la memoria a continuación.

Modelos en SQLAlchemy

Uno de los componentes clave de un ORM es un modelo . Esta es una clase de Python que describe cómo debería verse una tabla y cómo debería funcionar. Es la versión ORM del CREAR MESA declaración en SQL. Necesita un modelo para cada tabla en su base de datos.

Abra su editor de texto o IDE favorito y cree un nuevo archivo llamado test.py . Ingrese este código de inicio, guarde el archivo y ejecútelo:

|_+_|

Este código hace varias cosas. Las importaciones son necesarias para que Python entienda dónde encontrar los módulos SQLAlchemy que necesita. Tus modelos usarán el base_declarativa más adelante, y configura los nuevos modelos para que funcionen como se esperaba.

los create_engine El método crea una nueva conexión a su base de datos. Si ya tiene una base de datos, deberá cambiar sqlite: // a la URI de su base de datos. Tal como está, este código creará una nueva base de datos solo en la memoria. La base de datos se destruye una vez que su código termina de ejecutarse.

Finalmente, el create_all El método crea todas las tablas definidas en sus modos en su base de datos. Como aún no ha definido ningún modelo, no pasará nada. Continúe y ejecute este código para asegurarse de que no tiene ningún problema o error tipográfico.

Hagamos un modelo. Agregue otra importación al principio de su archivo:

|_+_|

Esto importa el Columna , Entero , y Cuerda módulos de SQLAlchemy. Definen cómo funcionan las tablas, los campos, las columnas y los tipos de datos de la base de datos.

Debajo del base_declarativa , crea tu clase modelo:

|_+_|

Este simple ejemplo usa autos, pero sus tablas pueden contener cualquier dato.

Cada clase debe heredar Base . El nombre de la tabla de su base de datos está definido en __nombre de la tabla__ . Este debería ser el mismo que el nombre de la clase, pero esto es solo una recomendación, y nada se romperá si no coinciden.

Finalmente, cada columna se define como una variable de Python dentro de la clase. Se utilizan diferentes tipos de datos y Clave primaria atributo le dice a SQLAlchemy que cree el identificación columna como clave principal.

Continúe y agregue una última importación, esta vez para el Clave externa módulo. Agregue esto junto con su Columna importar:

|_+_|

Ahora cree una segunda clase de modelo. Esta clase se llama Propietarios de coches y almacena los detalles del propietario de automóviles específicos almacenados en el Carros mesa:

|_+_|

Aquí se introducen varios atributos nuevos. los car_id El campo se define como una clave externa. Está vinculado a la identificación en el carros mesa. Observe cómo se usa el nombre de la tabla en minúsculas, en lugar del nombre de la clase en mayúsculas.

Finalmente, un atributo de coche se define como un relación . Esto permite que su modelo acceda al Carros tabla a través de esta variable. Esto se demuestra a continuación.

Si ejecuta este código ahora, verá que no pasa nada. Esto se debe a que todavía no le ha dicho que haga nada notable.

Objetos en SQLAlchemy

Ahora que sus modelos están creados, puede comenzar a acceder a los objetos y leer y escribir datos. Es una buena idea colocar su lógica en su propia clase y archivo, pero por ahora, puede permanecer junto con los modelos.

Escribir datos

En este ejemplo, debe insertar algunos datos en la base de datos antes de poder leerlos. Si está utilizando una base de datos existente, es posible que ya tenga datos. De cualquier manera, sigue siendo muy útil saber cómo insertar datos.

Puede que estés acostumbrado a escribir INSERTAR declaraciones en SQL. SQLAlchemy se encarga de esto por usted. Aquí se explica cómo insertar una fila en el Carros modelo. Comience con una nueva importación para creador de sesiones :

|_+_|

Esto es necesario para crear el sesión y DBSession objetos, que se utilizan para leer y escribir datos:

|_+_|

Ahora pon esto debajo de tu create_all declaración:

|_+_|

Analicemos ese código. La variable coche1 se define como un objeto basado en el Carros modelo. Su marca y color se establecen como parámetros. Esto es como decir 'hazme un coche, pero no lo escribas todavía en la base de datos'. Este auto existe en la memoria pero está esperando a ser escrito.

Añade el coche a la sesión con session.add y luego escribirlo en la base de datos con session.commit .

Ahora agreguemos un propietario:

|_+_|

Este código es casi idéntico al inserto anterior para el Carros modelo. La principal diferencia aquí es que car_id es una clave externa, por lo que necesita una identificación de fila que existe en la otra tabla. A esto se accede a través del car1.id propiedad.

No tiene que consultar la base de datos ni devolver ningún ID, ya que SQLAlchemy maneja esto por usted (siempre que confirme los datos primero).

Leer datos

Una vez que haya escrito algunos datos, puede comenzar a leerlos. A continuación se explica cómo consultar el Carros y Propietarios de coches mesas:

|_+_|

Es así de simple. Usando el consulta método encontrado en el sesión , especifica el modelo y luego usa el todos método para recuperar todos los resultados. Si sabe que solo habrá un resultado, puede usar el primero método:

|_+_|

Una vez que haya consultado el modelo y haya almacenado los resultados devueltos en una variable, puede acceder a los datos a través del objeto:

|_+_|

Esto imprime el color 'plateado', ya que ese registro es la primera fila. Puede recorrer el objeto de resultado si lo desea.

A medida que definió la relación en su modelo, es posible acceder a los datos en tablas relacionadas sin especificar una combinación:

|_+_|

Esto funciona porque su modelo contiene detalles de la estructura de su tabla, y el coche El atributo se definió como un enlace al carros mesa.

¿Qué es lo que no me gusta de los ORM?

Este tutorial solo cubrió los conceptos básicos, pero una vez que los domine, puede pasar a los temas avanzados. Hay algunas desventajas potenciales de los ORM:

  • Tienes que escribir tu modelo antes de que se puedan ejecutar las consultas.
  • Es otra nueva sintaxis para aprender.
  • Puede ser demasiado complejo para necesidades simples.
  • Para empezar, debe tener un buen diseño de base de datos.

Estos problemas no son un gran problema por sí mismos, pero son cosas a tener en cuenta. Si está trabajando con una base de datos existente, puede quedar atrapado.

Si no está convencido de que un ORM sea la herramienta adecuada para usted, asegúrese de leer acerca de la importantes comandos SQL que los programadores deben saber .

Cuota Cuota Pío Correo electrónico ¿Debería actualizar a Windows 11 inmediatamente?

Windows 11 llegará pronto, pero ¿debería actualizar lo antes posible o esperar unas semanas? Vamos a averiguar.

Leer siguiente
Temas relacionados
  • Programación
  • Pitón
  • SQL
  • Tutoriales de codificación
Sobre el Autor Joe Coburn(136 Artículos publicados)

Joe es licenciado en Ciencias de la Computación por la Universidad de Lincoln, Reino Unido. Es un desarrollador de software profesional, y cuando no está volando drones o escribiendo música, a menudo se le puede encontrar tomando fotos o produciendo videos.

las mejores aplicaciones para ver películas gratis
Más de Joe Coburn

Suscríbete a nuestro boletín

¡Únase a nuestro boletín de noticias para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!

Haga clic aquí para suscribirse