En este artículo, vamos a ver cómo escribir expresiones SQL usando SQLAlchmey CORE usando text() en SQLAlchemy contra una base de datos PostgreSQL en Python.
Creación de tabla para demostración.
Importe las funciones necesarias del paquete SQLAlchemy. Establezca una conexión con la base de datos PostgreSQL usando la función create_engine() como se muestra a continuación. Cree una tabla llamada libros con las columnas book_id y book_price. Inserte un registro en las tablas usando la función insert() y valores() como se muestra.
Python3
# import necessary packages from sqlalchemy.engine import result from sqlalchemy import create_engine, MetaData,\ Table, Column, Numeric, Integer, VARCHAR from sqlalchemy import text # establish connections engine = create_engine( "dialect+driver://username:password@host:port/database_name") # initialize the Metadata Object meta = MetaData(bind=engine) MetaData.reflect(meta) # create a table schema books = Table( 'books', meta, Column('book_id', Integer, primary_key=True), Column('book_price', Numeric), Column('genre', VARCHAR), Column('book_name', VARCHAR) ) meta.create_all(engine) # insert records into the table statement1 = books.insert().values(book_id=1, book_price=12.2, genre='fiction', book_name='Old age') statement2 = books.insert().values(book_id=2, book_price=13.2, genre='non-fiction', book_name='Saturn rings') statement3 = books.insert().values(book_id=3, book_price=121.6, genre='fiction', book_name='Supernova') statement4 = books.insert().values(book_id=4, book_price=100, genre='non-fiction', book_name='History of the world') statement5 = books.insert().values(book_id=5, book_price=1112.2, genre='fiction', book_name='Sun city') # execute the insert records statement engine.execute(statement1) engine.execute(statement2) engine.execute(statement3) engine.execute(statement4) engine.execute(statement5)
Producción:
Implementando una consulta para ejecutar expresiones SQL en SQLAlchemy
SQLAlchemy proporciona una función llamada text(). Podemos escribir cualquier consulta SQL convencional dentro de la función de texto encerrada por “”. Ahora, pasar esta consulta SQL para ejecutar la función convertirá esta consulta a un formato compatible con SQLAlchemy y devolverá el resultado.
from sqlalchemy import text text("YOUR SQL QUERY")
Pase la consulta SQL a la función execute() y obtenga todos los resultados usando la función fetchall(). Use un bucle for para iterar a través de los resultados.
Ejemplo 1: Ejecutando una consulta básica
La consulta SQLAlchemy que se muestra en el siguiente código selecciona todas las filas donde el precio del libro es mayor que Rs. 100.
Python3
from sqlalchemy import text # write the SQL query inside the text() block sql = text('SELECT * from BOOKS WHERE BOOKS.book_price > 100') results = engine.execute(sql) # Fetch all the records result = engine.execute(sql).fetchall() # View the records for record in result: print("\n", record)
Producción:
Ejemplo 2: Ejecutar consulta de inserción
La siguiente expresión SQL insertará registros adicionales en la tabla creada de una forma SQL convencional.
Python3
# define a tuple of dictionary of values to be inserted data = ( { "book_id": 6, "book_price": 400, "genre": "fiction", "book_name": "yoga is science" }, { "book_id": 7, "book_price": 800, "genre": "non-fiction", "book_name": "alchemy tutorials" }, ) # write the insert statement statement = text("""INSERT INTO BOOKS\ (book_id, book_price, genre, book_name) \ VALUES(:book_id, :book_price, :genre, :book_name)""") # insert the data one after other using # execute statement by unpacking dictionary elements for line in data: engine.execute(statement, **line) # write the SQL query to check # whether the records are inserted sql = text("SELECT * FROM BOOKS ") results = engine.execute(sql) # View the records for record in results: print("\n", record)
Producción:
Ejemplo 3: Ejecutar consulta de actualización
Veamos otro ejemplo relacionado con la consulta de actualización.
Tablename.update().where(Tablename.c.column_name == ‘value’).values(column_name = ‘value’)
Obtenga la tabla de libros del objeto Metadata inicializado mientras se conecta a la base de datos. Pase la consulta de eliminación a la función execute() y obtenga todos los resultados usando la función fetchall(). Use un bucle for para iterar a través de los resultados.
La consulta SQLAlchemy que se muestra en el siguiente código actualiza el género «no ficción» como «ciencia ficción», esto actualizará efectivamente varias filas a la vez. Luego, podemos escribir una consulta SQL convencional y usar fetchall() para imprimir los resultados y verificar si la tabla se actualizó correctamente.
Python3
# Get the `books` table from the Metadata object BOOKS = meta.tables['books'] # update stmt = BOOKS.update().where(BOOKS.c.genre == 'non-fiction' ).values(genre='sci-fi') engine.execute(stmt) # write the SQL query inside the # text() block to fetch all records sql = text("SELECT * from BOOKS") # Fetch all the records result = engine.execute(sql).fetchall() # View the records for record in result: print("\n", record)
Producción:
Ejemplo 4: Ejecutar consulta de eliminación
La eliminación de elementos de la tabla tiene un procedimiento ligeramente diferente al de una consulta SQL convencional que se muestra a continuación
from sqlalchemy import delete Tablename.delete().where(Tablename.c.column_name == value)
Obtenga la tabla de libros del objeto Metadata inicializado mientras se conecta a la base de datos. Pase la consulta de eliminación a la función execute() y obtenga todos los resultados usando la función fetchall(). Use un bucle for para iterar a través de los resultados.
La consulta SQLAlchemy que se muestra en el siguiente código elimina el género de «ficción», lo que eliminará efectivamente varias filas de una sola vez. Luego, podemos escribir una consulta SQL convencional y usar fetchall() para imprimir los resultados y verificar si la tabla se actualizó correctamente.
Python3
# Get the `books` table from the Metadata object BOOKS = meta.tables['books'] # delete dele = BOOKS.delete().where(BOOKS.c.genre == "fiction") engine.execute(dele) # write the SQL query inside the # text() block to fetch all records sql = text("SELECT * from BOOKS") # Fetch all the records result = engine.execute(sql).fetchall() # View the records for record in result: print("\n", record)
Producción:
Publicación traducida automáticamente
Artículo escrito por jssuriyakumar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA