¿Cómo copiar una definición de tabla en MySQL usando Python?

Python requiere una interfaz para acceder a un servidor de base de datos. Python admite una amplia gama de interfaces para interactuar con varias bases de datos. Para comunicarse con una base de datos MySQL , se utiliza el módulo MySQL Connector Python , una API escrita exclusivamente en Python. Este módulo es autosuficiente, lo que significa que no tiene dependencias y solo requiere la biblioteca estándar de Python. 

Copiando una definición de tabla en SQL:

Con las declaraciones CREATE y SELECT, uno puede copiar la definición y los datos de una tabla existente a una tabla nueva.

Sintaxis:

CREATE TABLE new_table AS 
SELECT * FROM original_table;

Aquí, el contenido de una tabla existente (original_table) se copia en una nueva tabla (new_table). La sentencia CREATE crea una nueva tabla que tiene la estructura definida por la sentencia SELECT y llena la nueva tabla con las columnas seleccionadas (* indica que todas las columnas están seleccionadas). 

Nota: Los objetos de la base de datos asociados con la tabla original, como índices, restricciones clave, etc., no se duplican.

Para copiar una tabla junto con sus objetos de base de datos dependientes, se utilizan las sentencias CREATE, LIKE e INSERT.

Sintaxis:

CREATE TABLE new_table 
LIKE original_table;

INSERT new_table 
SELECT * FROM original_table;

Primero, la declaración CREATE crea una nueva tabla ( new_table ) que tiene la misma estructura y objetos dependientes que la tabla existente ( original_table ). Luego, la declaración INSERT llena la nueva tabla con los valores seleccionados de la tabla original. El simple uso de la sentencia CREATE sin INSERT creará una tabla vacía con la estructura y los objetos dependientes de la tabla existente.

Pasos usando Python:

  1. Establezca una conexión con el servidor de la base de datos y cree un objeto de cursor.
  2. Utilice el objeto de cursor para ejecutar las instrucciones CREATE-SELECT o CREATE-LIKE-INSERT para copiar una tabla.
  3. Compruebe si se ha copiado la definición de la tabla.

Veamos algunos ejemplos para una mejor comprensión.

Base de datos en uso:

Utilizaremos una base de datos de la tienda con una tabla de productos que describe los productos y el stock disponible.

Ejemplo 1: Copie la definición de la tabla utilizando la declaración CREATE-SELECT

Use la función connect() para establecer una conexión con el servidor de la base de datos y use la función para crear un objeto de cursor. Con este objeto de cursor, ejecute la declaración CREATE-SELECT para crear una copia de la tabla de productos nueva tabla de inventario usando la función execute() . Para verificar si la tabla recién creada tiene la misma definición de tabla que la original, use la instrucción DESC para describir la estructura y la instrucción SELECT para verificar el contenido de la tabla.

Python

# Import required packages
import mysql.connector
  
# Establish connection to MySQL database
db = mysql.connector.connect(
    host = "localhost",
    user = "username",
    password = "geeksforgeeks",
    database = "store"
)
  
# Create a cursor object
cursor = db.cursor()
  
# MySQL query for copying existing table,
# selecting new table data and
# describing new table structure
queries = "CREATE TABLE inventory1 AS SELECT * FROM products;\
           DESC inventory1;"
      
# Execute the query 
results = cursor.execute(queries, multi = True)
  
# Print data and description of newly created table
for result in results:
    if result.with_rows:
        for row in result:
            print(row)
              
# Close database connection
db.close()

Producción:

Todos los valores de la tabla de productos se copian en la tabla de inventario . Se conserva la estructura, es decir, los tipos de datos y las columnas. Sin embargo, los objetos de la base de datos, como la restricción de clave principal de prod_id , no se conservan. 

Ejemplo 2: Copie la definición de la tabla sin el contenido de la tabla usando la instrucción CREATE-SELECT

Utilice el mismo código para establecer una conexión y verificación que en el ejemplo anterior. Para simplemente copiar la definición de la tabla y no el contenido, agregue una cláusula WHERE a la declaración SELECT de modo que devuelva un conjunto vacío y no se copien valores de la siguiente manera.

Python

# Import required packages
import mysql.connector
  
# Establish connection to MySQL database
db = mysql.connector.connect(
    host="localhost",
    user="username",
    password="geeksforgeeks",
    database="store"
)
  
# Create a cursor object
cursor = db.cursor()
  
# MySQL queries for copying existing table
# without copying its data,
# selecting new table data and
# describing new table structure
queries = "CREATE TABLE inventory2 AS \
           SELECT * FROM products \
           WHERE 1=0; \
           DESC inventory2;"
  
# Execute the query
results = cursor.execute(queries, multi=True)
  
# Print data and description of newly created table
for result in results:
    if result.with_rows:
        for row in result:
            print(row)
  
# Close database connection
db.close()

La condición 1 = 0 en la consulta CREATE-SELECT siempre se evalúa como falsa. Entonces, la consulta devuelve una tabla vacía, creando una nueva tabla de inventario vacía con la misma estructura que la tabla de productos existente.

Producción:

Ejemplo 3: Copie la definición de la tabla y los objetos de la base de datos dependientes mediante la instrucción CREATE-LIKE

Use el mismo código para establecer una conexión y verificación que en el Ejemplo 1. Para copiar una tabla con todos sus objetos y contenidos dependientes, use la declaración CREATE-LIKE-INSERT como se muestra a continuación.

Python

# Import required packages
import mysql.connector
  
# Establish connection to MySQL database
db = mysql.connector.connect(
    host="localhost",
    user="username",
    password="geeksforgeeks",
    database="store"
)
  
# Create a cursor object
cursor = db.cursor()
  
# MySQL queries for copying existing table,
# selecting new table data and
# describing new table structure
queries = "CREATE TABLE inventory3 LIKE products; \
           INSERT inventory3 SELECT * FROM products;\
           DESC inventory3;"
      
# Execute the query 
results = cursor.execute(queries, multi = True)
  
# Print data and description of newly created table
for result in results:
    if result.with_rows:
        for row in result:
            print(row)
              
# Close database connection
db.close()

Producción:

Observe que se conserva la restricción de clave principal de prod_id .

Ejemplo 4: Copie la definición de la tabla y los objetos dependientes sin datos de la tabla usando la instrucción CREATE-LIKE

Use el mismo código para establecer una conexión y verificación que en el Ejemplo 1. Para simplemente copiar la definición de la tabla y no el contenido, elimine la declaración INSERT como se muestra a continuación.

Python

# Import required packages
import mysql.connector
  
# Establish connection to MySQL database
db = mysql.connector.connect(
    host="localhost",
    user="username",
    password="geeksforgeeks",
    database="store"
)
  
# Create a cursor object
cursor = db.cursor()
  
# MySQL queries for copying existing table
# without copying its data,
# selecting new table data and
# describing new table structure
queries = "CREATE TABLE inventory4 LIKE products; \
           DESC inventory4;"
  
# Execute the query
results = cursor.execute(queries, multi=True)
  
# Print data and description of newly created table
for result in results:
    if result.with_rows:
        for row in result:
            print(row)
  
# Close database connection
db.close()

Producción:

Publicación traducida automáticamente

Artículo escrito por akshisaxena y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *