Todo lo que necesita saber sobre Python y los mapas relacionales de objetos
Es posible que haya oído hablar de la asignación de objetos relacionales (ORM). Puede que incluso hayas usado uno, pero ¿qué son exactamente? ¿Y cómo se usan en Python??
Aquí tienes todo lo que necesitas saber sobre ORMs y Python.
¿Qué es un ORM??
El mapeo objeto-relacional (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 objetos.
Puede parecer complejo e innecesario, pero pueden ahorrarle mucho tiempo y ayudarlo a controlar el acceso a su base de datos..
Aquí hay un ejemplo. Diga que cada vez que inserte una contraseña en su base de datos, la eliminará, como se explica en la seguridad de la contraseña del sitio web Cada sitio web seguro lo hace con su contraseña Todo sitio web seguro lo hace con su contraseña ¿Alguna vez se ha preguntado cómo los sitios web mantienen su contraseña a salvo de los datos? infracciones? Lee mas . Esto no es un problema para casos de uso simple: usted hace 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 nada??
Al utilizar un ORM, puede escribir código para asegurarse de que siempre y cuando se acceda a cualquier fila o campo de su base de datos, se ejecute primero su otro código personalizado..
Esto también actúa como un “única fuente 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. Guía para principiantes de Python. Programación orientada a objetos. Guía de principiantes para Python. Programación orientada a objetos. Para aprovechar al máximo las fortalezas de Python, querrá saber cómo. Python trabaja con programación orientada a objetos (OOP). Lea más, pero los ORM trabajan en conjunto con los principios de OOP para controlar el acceso a una base de datos.
Hay ciertas cosas que debe tener en cuenta al usar un ORM, y existen circunstancias en las que es posible que no quiera usar uno, pero generalmente se considera que es bueno tenerlas, especialmente en una base de código grande..
ORMs 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??
Los siguientes ejemplos utilizan SQLAlchemy, un popular ORM de Python, pero muchos de los principios se aplican independientemente de la implementación..
Configurando Python para SQLAlchemy
Antes de comenzar, deberás configurar tu máquina para el desarrollo de Python con SQLAlchemy.
Deberá usar Python 3.6 para seguir estos ejemplos. Mientras que las versiones anteriores funcionarán, el código siguiente necesitará algunas modificaciones antes de ejecutarse. ¿No está 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 explicaremos todo lo que necesita saber sobre Python como principiante. Leer más cubre todas las diferencias..
Antes de codificar, debe configurar un entorno de Python. Aprenda cómo utilizar el entorno virtual de Python. Aprenda a usar el entorno virtual de Python. Si es un desarrollador experimentado de Python, o si recién está empezando, aprender cómo configurar un entorno virtual es esencial. para cualquier proyecto de Python. Lea más, lo que evitará problemas con otros paquetes de Python importados.
Asegúrese de tener PIP, el administrador de paquetes de Python. Cómo instalar PIP para Python en Windows, Mac y Linux. Cómo instalar PIP para Python en Windows, Mac y Linux. Muchos desarrolladores de Python confían en una herramienta llamada PIP para Python para hacer todo mucho más fácil y más rápido. Aquí es cómo instalar PIP. Leer más instalado, que viene con las versiones más modernas de Python.
Una vez que esté listo para comenzar, puede comenzar preparando a SQLAlchemy. Desde dentro de su entorno Python en la línea de comando, instale SQLAlchemy con el instalación de pip mando:
pip instalar 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 sabes cuándo una nueva versión puede romper tu código actual.
Ahora estás listo para comenzar a programar. Es posible que deba preparar su base de datos para aceptar una conexión Python, pero los siguientes ejemplos utilizan 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 verse una tabla y cómo debería funcionar. Es la versión ORM de la 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 test.py. Ingrese este código de inicio, guarde el archivo y ejecútelo:
desde sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base Base = declarative_base () engine = create_engine ('sqlite: //') # Crear la base de datos en la memoria Base.metadata.create_all (engine) # Crear todas las tablas en la base de datos
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 utilizarán la base declarativa Más adelante, y configura cualquier modelo nuevo para que funcione como se espera..
los create_engine método crea una nueva conexión a su base de datos. Si ya tiene una base de datos, deberá cambiar sqlite: // a su base de datos URI. Tal como está, este código creará una nueva base de datos en la memoria solamente. La base de datos se destruye una vez que su código termina de ejecutarse.
Finalmente, el crear_todos método crea todas las tablas definidas en sus modos en su base de datos. Como todavía no has definido ningún modelo, no sucederá nada. Continúe y ejecute este código para asegurarse de que no tenga problemas o errores tipográficos.
Hagamos un modelo. Agrega otra importación a la parte superior de tu archivo:
desde sqlalchemy import Column, Integer, String
Esto importa el Columna, Entero, y Cuerda Módulos de SQLAlchemy. Definen cómo funcionan las tablas de bases de datos, los campos, las columnas y los tipos de datos..
Debajo de la base declarativa, 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__. 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 python dentro de la clase. Se utilizan diferentes tipos de datos, y la Clave primaria 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. Agrega esto junto con tu Columna importar:
desde sqlalchemy import Column, ForeignKey, Integer, String
Ahora crea una segunda clase de modelo. Esta clase se llama CarOwners, y almacena detalles del propietario de coches 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 = relationship (Coches)
Hay varios atributos nuevos introducidos aquí. los car_id campo se define como una clave externa. 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 una relación. Esto le permite a su modelo acceder a la Coches 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 has dicho que haga algo 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..
Escribiendo 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 maneja esto por ti. Aquí es cómo insertar una fila en el Coches modelo. Comience con una nueva importación para sesionista:
desde sqlalchemy.orm import sessionmaker
Esto es necesario para crear el sesión y DBSESION Objetos, que se utilizan para leer y escribir datos:
DBSession = sessionmaker (bind = engine) session = DBSession ()
Ahora pon esto debajo de tu crear_todos declaración:
car1 = Cars (make = "Ford", color = "silver") session.add (car1) session.commit ()
Vamos a desglosar ese código. La variable car1 Se define como un objeto basado en el Coches 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á a la espera de 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 vamos a agregar 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 un ID de fila que exista en la otra tabla. Esto se accede a través de la 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 primero confirme los datos).
Lectura de datos
Una vez que haya escrito algunos datos, puede comenzar a leerlos nuevamente. Aquí es cómo consultar el Coches y CarOwners mesas:
result = session.query (Cars) .all ()
Es así de simple. Utilizando 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, entonces puede usar el primero método:
result = session.query (Cars) .first ()
Una vez que haya consultado el modelo y almacenado los resultados devueltos en una variable, puede acceder a los datos a través del objeto:
imprimir (resultado [0]. color)
Esto imprime el color “plata”, Como ese registro es la primera fila. Puede hacer un bucle sobre el objeto de resultado si desea.
A medida que define la relación en su modelo, es posible acceder a datos en tablas relacionadas sin especificar una combinación:
result = session.query (CarOwners) .all () print (result [0] .name) print (result [0] .car.color)
Esto funciona porque su modelo contiene detalles de su estructura de tabla, y la coche atributo fue definido como un enlace a la coches mesa.
Lo que no me gusta de los ORMs?
Este tutorial solo cubrió los conceptos básicos, pero una vez que los aprendas, puedes pasar a los temas avanzados. Hay algunos inconvenientes potenciales para los ORM:
- Tienes que escribir tu modelo antes de que cualquier consulta pueda ejecutar.
- Es otra sintaxis nueva para aprender..
- Puede ser demasiado complejo para necesidades simples.
- Debe tener un buen diseño de base de datos para empezar.
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 de SQL importantes que los programadores deben conocer. 13 Comandos de SQL más importantes que cualquier programador debe saber 13. 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. Lee mas .
Explorar más sobre: Tutoriales de codificación, Python, SQL.