stringtranslate.com

Alquimia SQL

Mike Bayer habla sobre SQLAlchemy en PyCon 2012

SQLAlchemy es una biblioteca Python de código abierto que proporciona un conjunto de herramientas SQL (denominado "SQLAlchemy Core") y un mapeador relacional de objetos (ORM) para interacciones con bases de datos. Permite a los desarrolladores trabajar con bases de datos utilizando objetos Python, lo que permite un acceso eficiente y flexible a las bases de datos.

Descripción

SQLAlchemy ofrece herramientas para la generación de esquemas de bases de datos, consultas y mapeo de objetos relacionales. Las características principales incluyen:

Historia

SQLAlchemy se lanzó por primera vez en febrero de 2006. Ha evolucionado para incluir una amplia gama de funciones para la interacción con bases de datos y ha ganado popularidad entre los desarrolladores de Python. Las versiones más destacadas incluyen:

Ejemplo

El siguiente ejemplo representa una relación n a 1 entre películas y sus directores. Se muestra cómo las clases de Python definidas por el usuario crean las tablas de bases de datos correspondientes, cómo se crean instancias con relaciones desde ambos lados de la relación y, por último, cómo se pueden consultar los datos, lo que ilustra las consultas SQL generadas automáticamente tanto para la carga diferida como para la carga ansiosa.

Definición de esquema

Creación de dos clases de Python y las tablas de base de datos correspondientes en el DBMS:

desde  sqlalchemy  importar  * desde  sqlalchemy.ext.declarative  importar  declarative_base desde  sqlalchemy.orm  importar  relación ,  sessionmakerBase  =  base_declarativa ()clase  Película ( Base ):  __tablename__  =  "películas" id  =  Columna ( Entero ,  clave_principal = Verdadero )  título  =  Columna ( Cadena ( 255 ),  que acepta valores null = Falso )  año  =  Columna ( Entero )  dirigido_por  =  Columna ( Entero ,  Clave_externa ( "directors.id" )) director  =  relación ( "Director" ,  backref = "películas" ,  lazy = False ) def  __init__ ( self ,  título = None ,  año = None ):  self . título  =  título  self . año  =  año def  __repr__ ( self ):  return  f "Película( { self . título } , { self . año } , { self . director } )"clase  Director ( Base ):  __tablename__  =  "directores" id  =  Columna ( Entero ,  clave principal = Verdadero )  nombre  =  Columna ( Cadena ( 50 ),  nulo = Falso ,  único = Verdadero ) def  __init __ ( self ,  nombre = None )  : self.nombre = nombre   def  __repr __ ( self ):  return  f "Director( { self.name } ) "motor  =  crear_motor ( " dbms :// usuario : contraseña @ host/nombre_base" ) Base.metadatos.crear_todos ( motor )

Inserción de datos

Se puede insertar una relación director-película a través de cualquiera de las entidades:

Sesión  =  sessionmaker ( bind = motor ) sesión  =  Session ()m1  =  Película ( "Robocop" ,  1987 ) m1 . director  =  Director ( "Paul Verhoeven" )d2  =  Director ( "George Lucas" ) d2 . películas  =  [ Película ( "Star Wars" ,  1977 ),  Película ( "THX 1138" ,  1971 )]intentar :  sesión.add ( m1 ) sesión.add ( d2 ) sesión.commit ( ) excepto : sesión.rollback ( )   

Consultando

alldata  =  session . query ( Movie ) . all () para  somedata  en  alldata :  print ( somedata )

SQLAlchemy emite la siguiente consulta al DBMS (omitiendo los alias):

SELECCIONAR películas . id , películas . título , películas . año , películas . dirigido_por , directores . id , directores . nombre DE películas UNIÓN EXTERNA IZQUIERDA directores EN directores . id = películas . dirigido_por               

La salida:

Película ( 'Robocop' ,  1987 L ,  Director ( 'Paul Verhoeven' )) Película ( 'Star Wars' ,  1977 L ,  Director ( 'George Lucas' )) Película ( 'THX 1138' ,  1971 L ,  Director ( 'George Lucas' ))

En cambio, si se configura lazy=True(por defecto), SQLAlchemy primero emitiría una consulta para obtener la lista de películas y solo cuando sea necesario (de forma diferida) para cada director, una consulta para obtener el nombre del director correspondiente:

SELECCIONAR películas . id , películas . título , películas . año , películas . dirigido_por DE películas     SELECCIONAR directores . id , directores . nombre DE directores DONDE directores . id = % s      

Véase también

Referencias

  1. ^ Mike Bayer es el creador de SQLAlchemy y Mako Templates para Python.
  2. ^ "Descargar - SQLAlchemy". SQLAlchemy . Consultado el 21 de febrero de 2015 .
  3. ^ "Versión 2.0.36". 15 de octubre de 2024. Consultado el 27 de octubre de 2024 .
  4. ^ "zzzeek/sqlalchemy/source/LICENSE". BitBucket . Consultado el 21 de febrero de 2015 .
  5. ^ "Registro de cambios 0.1 — Documentación de SQLAlchemy 2.0". docs.sqlalchemy.org . Consultado el 4 de julio de 2024 .
  6. ^ "Registro de cambios de la versión 1.0: documentación de SQLAlchemy 2.0". docs.sqlalchemy.org . Consultado el 4 de julio de 2024 .
  7. ^ "Registro de cambios de la versión 1.4: documentación de SQLAlchemy 2.0". docs.sqlalchemy.org . Consultado el 4 de julio de 2024 .
Notas