Looking for sqlalchemy Answers? Try Ask4KnowledgeBase
Looking for sqlalchemy Keywords? Try Ask4Keywords

sqlalchemyEmpezando con sqlalchemy


Observaciones

LA FILOSOFIA DE LA SQLALQUIMA

Desde el sitio web de SQLAlchemy :

Las bases de datos SQL se comportan menos como las colecciones de objetos, mientras más tamaño y rendimiento comienzan a importar; las colecciones de objetos se comportan menos como tablas y filas, mientras más abstracción comienza a importar. SQLAlchemy tiene como objetivo dar cabida a estos dos principios.

SQLAlchemy considera que la base de datos es un motor de álgebra relacional, no solo una colección de tablas. Las filas se pueden seleccionar no solo de tablas sino también de uniones y otras declaraciones de selección; cualquiera de estas unidades se puede componer en una estructura más grande. El lenguaje de expresión de SQLAlchemy se basa en este concepto desde su núcleo.

SQLAlchemy es más famoso por su mapeador de objetos relacional (ORM), un componente opcional que proporciona el patrón del mapeador de datos, donde las clases se pueden mapear en la base de datos de forma abierta, de múltiples maneras, lo que permite que el modelo de objetos y el esquema de la base de datos se desarrollen en una Manera limpiamente desacoplada desde el principio.

El enfoque general de SQLAlchemy para estos problemas es completamente diferente del de la mayoría de las otras herramientas de SQL / ORM, enraizadas en el llamado enfoque orientado a la complementariedad; En lugar de esconder detalles relacionales de objetos y SQL detrás de un muro de automatización, todos los procesos están completamente expuestos dentro de una serie de herramientas compacta y transparente. La biblioteca asume el trabajo de automatizar tareas redundantes mientras el desarrollador mantiene el control de cómo está organizada la base de datos y cómo se construye SQL.

El objetivo principal de SQLAlchemy es cambiar la forma en que piensas sobre las bases de datos y SQL.

Versiones

Versión Estado de liberación Registro de cambios Fecha de lanzamiento
1.1 Beta 1.1 2016-07-26
1.0 Lanzamiento actual 1.0 2015-04-16
0.9 Mantenimiento 0.9 2013-12-30
0.8 Seguridad 0.8 2013-03-09

¡Hola Mundo! (SQLAlchemy Core)

Este ejemplo muestra cómo crear una tabla, insertar datos y seleccionar de la base de datos usando SQLAlchemy Core. Para obtener información sobre: SQLAlchemy ORM, consulte aquí .

Primero, necesitaremos conectarnos a nuestra base de datos.

from sqlalchemy import create_engine

engine = create_engine('sqlite://')
 

El motor es el punto de partida para cualquier aplicación SQLAlchemy. Es una "base de operaciones" para la base de datos real y su DBAPI, entregada a una aplicación SQLAlchemy a través de un conjunto de conexiones y un dialecto, que describe cómo hablar con un tipo específico de combinación de base de datos / DBAPI. El motor hace referencia tanto a un dialecto como a un conjunto de conexiones, que juntos interpretan las funciones del módulo DBAPI, así como el comportamiento de la base de datos.

Después de crear nuestro motor, necesitamos definir y crear nuestras tablas .

from sqlalchemy import Column, Integer, Text, MetaData, Table

metadata = MetaData()
messages = Table(
    'messages', metadata,
    Column('id', Integer, primary_key=True),
    Column('message', Text),
)

messages.create(bind=engine)
 

Para seguir explicando el objeto MetaData, vea lo siguiente de la documentación:

Una colección de objetos de tabla y sus objetos secundarios asociados se conoce como metadatos de base de datos

Definimos nuestras tablas dentro de un catálogo llamado MetaData, usando la construcción de la Tabla, que se asemeja a las sentencias CREATE TABLE de SQL regulares.

Ahora que hemos definido y creado nuestras tablas, ¡podemos comenzar a insertar datos! La inserción implica dos pasos. Componer la construcción de inserción , y ejecutar la consulta final.

insert_message = messages.insert().values(message='Hello, World!')
engine.execute(insert_message)
 

Ahora que tenemos datos, podemos usar la función de selección para consultar nuestros datos. Los objetos de columna están disponibles como atributos con nombre del atributo c en el objeto Tabla, lo que facilita la selección de columnas directamente. La ejecución de esta declaración de selección devuelve un objeto ResultProxy que tiene acceso a algunos métodos, fetchone () , fetchall () y fetchmany () , todos los cuales devuelven un número de filas de la base de datos consultadas en nuestra declaración de selección.

from sqlalchemy import select
stmt = select([messages.c.message]) 
message, = engine.execute(stmt).fetchone()
print(message)
 

Hello, World!
 

¡Y eso es! Consulte el Tutorial de expresiones SQL de SQLAlchemy para obtener más ejemplos e información.

¡Hola Mundo! (SQLAlchemy ORM)

Este ejemplo muestra cómo crear una tabla, insertar datos y seleccionar de la base de datos utilizando el ORM de SQLAlchemy . Para información sobre: SQLAlchemy Core, vea aquí .

Lo primero es lo primero, necesitamos conectarnos a nuestra base de datos, que es idéntica a la forma en que nos conectamos usando SQLAlchemy Core (Core).

from sqlalchemy import create_engine

engine = create_engine('sqlite://')
 

Después de conectar y crear nuestro motor, necesitamos definir y crear nuestras tablas. Aquí es donde el lenguaje ORM de SQLAlchemy comienza a diferir mucho del Core. En ORM, el proceso de creación y definición de tablas comienza definiendo las tablas y las clases que usaremos para asignar esas tablas. Este proceso se realiza en un paso en ORM, que SQLAlchemy llama el sistema Declarativo .

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
 

Ahora que nuestro mapeador base está declarado, podemos hacer una subclase de él para construir nuestros mapeos o models declarativos .

from sqlalchemy import Column, Integer, String

class Message(Base):
    __tablename__ = 'messages'
    
    id = Column(Integer, primary_key=True)
    message = Column(String)
 

Usando la clase base declarativa, terminamos creando una Table y un objeto Mapper . De la documentación:

El objeto Table es un miembro de una colección más grande conocida como MetaData. Cuando se utiliza Declarativo, este objeto está disponible con el atributo .metadata de nuestra clase base declarativa.

Teniendo esto en cuenta, para crear todas las tablas que aún no existen, podemos llamar al siguiente comando, que utiliza el registro de metadatos de SQLAlchemy Core.

Base.metadata.create_all(engine)
 

Ahora que nuestras tablas están asignadas y creadas, ¡podemos insertar datos! La inserción se realiza mediante la creación de instancias del asignador .

message = Message(message="Hello World!")
message.message # 'Hello World!
 

En este punto, todo lo que tenemos es una instancia de mensaje en el nivel del nivel de abstracción ORM, pero aún no se ha guardado nada en la base de datos. Para hacer esto, primero necesitamos crear una sesión .

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()
 

Este objeto de sesión es nuestro manejador de base de datos. Según los documentos de SQLAlchemy:

recupera una conexión de un grupo de conexiones mantenidas por el motor y la mantiene hasta que confirmamos todos los cambios y / o cerramos el objeto de la sesión.

Ahora que tenemos nuestra sesión, podemos agregar nuestro nuevo mensaje a la sesión y confirmar nuestros cambios en la base de datos.

session.add(message)
session.commit()
 

Ahora que tenemos datos, podemos aprovechar el lenguaje de consulta ORM para recuperar nuestros datos.

query = session.query(Message)
instance = query.first()
print (instance.message) # Hello World!
 

Pero eso es solo el comienzo! Hay muchas más funciones que se pueden usar para redactar consultas, como filter , order_by y muchas más. Consulte el tutorial de SQLAlchemy ORM para obtener más ejemplos e información.

Instalación o configuración

pip install sqlalchemy
 

Para las aplicaciones más comunes, particularmente las aplicaciones web, generalmente se recomienda que los principiantes consideren usar una biblioteca complementaria, como flask-sqlalchemy .

pip install flask-sqlalchemy