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

  • Peter Holmes
  • 0
  • 811
  • 46
Anuncio

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

Aquí está 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, utiliza una serie de atributos y métodos adjuntos a los objetos..

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

Aquí hay un ejemplo. Supongamos que cada vez que inserta una contraseña en su base de datos, desea hacer un hash, como se explica en la seguridad de la contraseña del sitio web. Cada sitio web seguro hace esto con su contraseña. Cada sitio web seguro hace esto con su contraseña. infracciones? . Esto no es un problema para casos de uso simples: debe hacer el cálculo antes de insertarlo. Pero, ¿qué sucede si necesita insertar un registro en muchos lugares del código? ¿Qué pasa si otro programador se inserta en su mesa y usted no sabe acerca de?

Al usar un ORM, puede escribir código para asegurarse de que siempre 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 un “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 la programación orientada a objetos (OOP) en Python Una guía para principiantes a la programación orientada a objetos de Python Una guía para principiantes a la programación orientada a objetos de Python Para aprovechar al máximo las fortalezas de Python, querrá aprender cómo Python funciona con programación orientada a objetos (OOP). , 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 cuando se usa un ORM, y hay circunstancias en las que es posible que no desee usar uno, pero generalmente se considera que es bueno tenerlo, especialmente en una base de código grande.

ORM en Python usando SQLAlchemy

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

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

Configurando 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? Preguntas frecuentes sobre Python Las preguntas más frecuentes sobre la programación de Python Las preguntas más frecuentes sobre la programación de Python En este artículo, le mostraremos todo lo que necesita saber sobre Python como principiante. cubre todas las diferencias.

Antes de codificar, debe configurar un entorno de Python. Aprenda a usar el entorno virtual de Python. Aprenda a usar el entorno virtual de Python. Ya sea que sea un desarrollador experimentado de Python o que recién esté comenzando, aprender cómo configurar un entorno virtual es esencial. para cualquier proyecto de Python. , lo que evitará problemas con otros paquetes importados de Python.

Asegúrese de tener PIP, el administrador de paquetes de Python Cómo instalar Python PIP en Windows, Mac y Linux Cómo instalar Python PIP en Windows, Mac y Linux Muchos desarrolladores de Python confían en una herramienta llamada PIP para Python para hacer todo más fácil y fácil. Más rápido. Aquí se explica cómo instalar Python PIP. 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 su entorno Python en la línea de comandos, instale SQLAlchemy con el pip install mando:

pip install SQLAlchemy-1.2.9

los 1.2.9 es el número de versión Puede dejar esto para obtener el último paquete, 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ás 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 una base de datos SQLite 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 ser 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 favorito o IDE, y cree un nuevo archivo llamado prueba.py. Ingrese este código de inicio, guarde el archivo y ejecútelo:

from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base Base = declarative_base () engine = create_engine ('sqlite: //') # Crea la base de datos en la memoria Base.metadata.create_all (engine) # Crea todas las tablas en la base de datos 

Este código hace varias cosas. Las importaciones son necesarias para que Python comprenda dónde encontrar los módulos SQLAlchemy que necesita. Sus modelos usarán el declarative_base más adelante, y configura cualquier modelo nuevo para que funcione como se espera.

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 su URI de base de datos. Tal como están las cosas, 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 todavía no ha definido ningún modelo, no pasará nada. Siga adelante y ejecute este código, para asegurarse de que no tenga ningún problema o error tipográfico.

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

desde sqlalchemy import Column, Integer, String

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 de la declarative_base, crea tu clase de modelo:

Clase Cars (Base): __tablename__ = 'cars' id = Column (Integer, primary_key = True) make = Column (String (50), nullable = False) color = Column (String (50), nullable = False)

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

Cada clase debe heredar Base. El nombre de la tabla de la base de datos se define en __nombre de la tabla__. Esto 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 el Clave primaria El atributo le dice a SQLAlchemy que cree el carné de identidad columna como clave principal.

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

desde sqlalchemy import Column, ForeignKey, Integer, String

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

clase CarOwners (Base): __tablename__ = 'carowners' id = Column (Integer, primary_key = True) name = Column (String (50), nullable = False) age = Column (Integer, nullable = False) car_id = Column (Integer, ForeignKey ('cars.id')) car = relación (Cars)

Hay varios atributos nuevos introducidos aquí. los car_id El campo se define como una clave foránea. Está vinculado a la carné de identidad en el coches 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 a Coches tabla a través de esta variable. Esto se demuestra a continuación.

Si ejecuta este código ahora, verá que no sucede nada. Esto se debe a que aún no le has 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 a 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.

Puedes estar acostumbrado a escribir INSERTAR declaraciones en SQL. SQLAlchemy se encarga de esto por usted. Aquí se explica cómo insertar una fila en el Coches modelo. Comience con una nueva importación para sesionista:

from sqlalchemy.orm import sessionmaker

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

DBSession = sessionmaker (bind = motor) session = DBSession ()

Ahora pon esto debajo de tu create_all declaración:

car1 = Cars (make = "Ford", color = "silver") session.add (car1) session.commit ()

Analicemos ese código. La variable car1 se define como un objeto basado en el Coches modelo. Su marca y color se configuran como parámetros. Esto es como decir “hazme un auto, pero aún no lo escribas en la base de datos”. Este auto existe en la memoria pero está esperando ser escrito.

Agrega el auto a la sesión con session.add, y luego escribirlo en la base de datos con session.commit.

Ahora agreguemos un propietario:

owner1 = CarOwners (name = "Joe", age = "99", car_id = (car1.id)) session.add (owner1) session.commit ()

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

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

Lectura de datos

Una vez que haya escrito algunos datos, puede comenzar a leerlos nuevamente. Aquí se explica cómo consultar el Coches y Propietarios de automóviles mesas:

resultado = session.query (Cars) .all ()

Es así de simple. Al usar el consulta método encontrado en el sesión, usted 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:

resultado = session.query (Cars) .first ()

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

print (resultado [0] .color)

Esto imprime el color “plata”, ya que ese registro es la primera fila. Puede recorrer el objeto de resultado si desea.

Cuando definió la relación en su modelo, es posible acceder a datos en tablas relacionadas sin especificar una unión:

result = session.query (CarOwners) .all () print (resultado [0] .name) print (resultado [0] .car.color)

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

Lo que no le 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 para los ORM:

  • Debe escribir su modelo antes de que se puedan ejecutar consultas.
  • Es otra nueva sintaxis para aprender.
  • Puede ser demasiado complejo para necesidades simples..
  • Debe tener un buen diseño de base de datos para comenzar.

Estos problemas no son un gran problema por sí solos, 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 es la herramienta adecuada para usted, asegúrese de leer acerca de los comandos SQL importantes que los programadores deben saber 13 comandos SQL más importantes que cualquier programador debe saber 13 comandos SQL más importantes que cualquier programador debe saber el sitio web utiliza una base de datos de alguna manera, y cuando se combina con el Lenguaje de consulta estructurado (SQL), las posibilidades para manipular datos realmente son infinitas. .




Nadie ha comentado sobre este artículo todavía.

Sobre tecnología moderna, simple y asequible.
Tu guía en el mundo de la tecnología moderna. Aprenda a usar las tecnologías y los dispositivos que nos rodean todos los días y aprenda a descubrir cosas interesantes en Internet.