Python требует интерфейса для доступа к серверу баз данных. Python поддерживает широкий спектр интерфейсов для взаимодействия с различными базами данных. Для связи с базой данных MySQL используется модуль Python MySQL Connector, API, написанный исключительно на Python. Этот модуль самодостаточен, что означает, что он не имеет зависимостей и требует только стандартной библиотеки Python.
Копирование определения таблицы в SQL:
С помощью инструкций CREATE и SELECT можно скопировать определение и данные из существующей таблицы в новую таблицу.
Синтаксис:
CREATE TABLE new_table AS
SELECT * FROM original_table;
Здесь содержимое существующей таблицы (original_table) копируется в новую таблицу (new_table). Инструкция CREATE создает новую таблицу со структурой, определенной инструкцией SELECT, и заполняет новую таблицу выбранными столбцами (* указывает, что выбраны все столбцы).
Примечание. Объекты базы данных, связанные с исходной таблицей, такие как индексы, ключевые ограничения и т.д., Не дублируются.
Для копирования таблицы вместе с ее зависимыми объектами базы данных используются операторы CREATE, LIKE и INSERT.
Синтаксис:
CREATE TABLE new_table
LIKE original_table;
INSERT new_table
SELECT * FROM original_table;
Во-первых, инструкция CREATE создает новую таблицу (new_table), имеющую ту же структуру и зависимые объекты, что и существующая таблица (original_table). Затем оператор INSERT заполняет новую таблицу значениями, выбранными из исходной таблицы. Простое использование инструкции CREATE без ВСТАВКИ создаст пустую таблицу, имеющую структуру и зависимые объекты существующей таблицы.
Шаги с использованием Python:
- Установите соединение с сервером базы данных и создайте объект курсора.
- Используйте объект курсора для выполнения инструкций CREATE-SELECT или CREATE-LIKE-INSERT для копирования таблицы.
- Проверьте, было ли скопировано определение таблицы.
Давайте рассмотрим несколько примеров для лучшего понимания.
Используемая база данных:
Мы будем использовать базу данных магазина с таблицей товаров, описывающей товары и доступные запасы.
Пример 1:
Скопируйте определение таблицы с помощью инструкции CREATE-SELECT
Используйте функцию connect() для установления соединения с сервером базы данных и используйте функцию cursor() для создания объекта курсора. С помощью этого объекта курсора выполните инструкцию CREATE-SELECT для создания копии новой таблицы запасов таблицы продуктов с помощью функции execute (). Чтобы проверить, имеет ли вновь созданная таблица то же определение таблицы, что и исходная, используйте инструкцию DESC для описания структуры и инструкцию SELECT для проверки содержимого таблицы.
# 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()
Выход:
Все значения из таблицы «Продукты» копируются в таблицу «Запасы«. Структура, то есть типы данных и столбцы, сохраняются. Однако объекты базы данных, такие как ограничение первичного ключа prod_id, не сохраняются.
Пример 2:
Скопируйте определение таблицы без содержимого таблицы с помощью инструкции CREATE-SELECT
Используйте тот же код для установления соединения и проверки, что и в приведенном выше примере. Чтобы просто скопировать определение таблицы, а не содержимое, добавьте предложение WHERE в инструкцию SELECT таким образом, чтобы оно возвращало пустой набор и никакие значения не копировались следующим образом.
# 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()
Условие 1 = 0 в запросе CREATE-SELECT всегда принимает значение false. Таким образом, запрос возвращает пустую таблицу, создавая новую пустую таблицу запасов с той же структурой, что и в существующей таблице продуктов.
Выход:
Пример 3:
Скопируйте определение таблицы и зависимые объекты базы данных с помощью инструкции CREATE-LIKE
Используйте тот же код для установления соединения и проверки, что и в примере 1. Чтобы скопировать таблицу со всеми ее зависимыми объектами и содержимым, используйте инструкцию CREATE-LIKE-INSERT, как показано ниже.
# 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()
Выход:
Обратите внимание, что ограничение первичного ключа prod_id сохраняется.
Пример 4:
Скопируйте определение таблицы и зависимые объекты без табличных данных с помощью инструкции CREATE-LIKE
Используйте тот же код для установления соединения и проверки, что и в примере 1. Чтобы просто скопировать определение таблицы, а не содержимое, удалите инструкцию INSERT, как показано ниже.
# 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()