SQL-Урок 13. Добавление данных (INSERT INTO)
В предыдущих разделах мы рассматривали работу по получению данных из заранее созданных таблиц. Теперь пора разобрать, каким же образом мы можем создавать/удалять таблицы, добавлять новые записи и удалять старые.
Для этих целей в SQL есть такие операторы, как:
Начнём знакомство с данной группой операторов с оператора INSERT.
1. Добавление целых строк
Как видно из названия, оператор INSERT INTO используется для вставки (добавления) строк в таблицу базы данных.
Добавление можно осуществить несколькими путями:
Итак, чтобы добавить новую строку в таблицу, нам нужно указать название таблицы, перечислить названия колонок и указать значение для каждой колонки с помощью конструкции INSERT INTO название_таблицы (поле1, поле2. ) VALUES(значение1, значение2. ). Рассмотрим на примере.
INSERT INTO Sellers (ID, Address, City, Seller_name, Country) VALUES ('6', '1st Street', 'Los Angeles', 'Harry Monroe', 'USA')
Можно также изменять порядок указания названий колонок, однако одновременно нужно изменять и порядок значений в параметре VALUES.
2. Добавление части строк
В предыдущем примере при использовании оператора INSERT мы явно указывали имена столбцов таблицы. Используя этот синтаксис, мы можем пропустить некоторые столбцы. Это означает, что вы вводите значение для одних столбцов и не предлагаете их для других. К примеру:
INSERT INTO Sellers (ID, City, Seller_name) VALUES ('6', 'Los Angeles', 'Harry Monroe')
В данном примере мы не указали значения для двух столбцов Address и Country. Некоторые столбцы можно исключать из оператора ааа, если это позволяет делать определение таблицы. В этом случае должно соблюдаться одно из условий: этот столбец определен как допускающий значение null (отсутствие какого-либо значения) или в определении таблицы указанное значение по умолчанию. Это означает, что если не указано никакое значение, будет использовано значение по умолчанию. Если вы пропускаете столбец таблицы, не допускающей появления в своих строках значений NULL и не имеющего значения, определенного для использования по умолчанию, СУБД выдаст сообщение об ошибке, и эта строка не будет добавлена.
3. Добавление отобранных данных
В предыдущих примерах мы вставляем данные в таблице, прописывая их вручную в запросе. Однако оператор INSERT INTO позволяет автоматизировать этот процесс, если мы хотим вставлять данные из другой таблицы. Для этого в SQL существует такая кострукция как INSERT INTO. SELECT. Данная конструкция позволяет одновременно выбирать данные из одной таблицы и вставить их в другую. Допустим, мы имеем еще одну таблицу Sellers_EU с перечнем продавцов нашего товара в Европе и нам нужно их добавить в общую таблицу Sellers. Структура этих таблиц одинакова (то же количество колонок и те же их названия), однако другие данные. Для этого мы можем прописать следующий запрос:
INSERT INTO Sellers (ID, Address, City, Seller_name, Country) SELECT ID, Address, City, Seller_name, Country FROM Sellers_EU
Следует обратить внимание, чтобы значения внутренних ключей не повторялись (поле ID), в противном случае произойдет ошибка. Оператор SELECT также может включать предложение WHERE для фильтрации данных. Также следует отметить, что СУБД не обращает внимания на названия колонок, содержащихся в операторе SELECT, для нее важен только порядок их расположения. Поэтому данные в первом указанном столбце, выбранные через SELECT, будут в любом случае заполнены в первый столбец таблицы Sellers, указанной после оператора INSERT INTO, независимо от названия поля.
4. Копирование данных из одной таблицы в другую
Часто при работе с базами данных возникает необходимость в создании копий любых таблиц с целью резервирования или модификации. Чтобы сделать полную копию таблицы в SQL, предусмотрен отдельный оператор SELECT INTO. Например, нам нужно создать копию таблицы Sellers, нужно будет прописать запрос следующим образом:
SELECT * INTO Sellers_new FROM Sellers
В отличие от предыдущей конструкции INSERT INTO. SELECT. когда данные добавляются в существующую таблицу, конструкция SELECT. INTO. FROM. копирует данные в новую таблицу. Также можно сказать, что первая конструкция импортирует данные, а вторая – экспортирует.
При использовании конструкции SELECT. INTO. FROM. следует учитывать следующее:
SQL — добавление данных в таблицу
Существуют два основных синтаксиса инструкции INSERT INTO:
INSERT INTO ИМЯ _ ТАБЛИЦЫ ( столбец 1 , столбец 2 , столбец 3 , . . . столбец N )
VALUES ( значение 1 , значение 2 , значение 3 , . . . значение N ) ;
Здесь столбец1, столбец2, столбец3,… столбец N — это названия столбцов в таблице, в которые вы хотите вставить данные. Вы можете не указывать имя столбца в SQL-запросе, если добавляете значения для всех столбцов таблицы. Но убедитесь, что порядок значений соответствует порядку столбцов в таблице.
В таком случае синтаксис инструкции SQL INSERT INTO будет следующим:
Как добавить данные в таблицу sql
Добавление данных в таблицу выполняется с помощью конструкции INSERT INTO . VALUES . . Лучше сразу посмотрим на пример:
INSERT INTO posts (name, slug, body) VALUES ('my first post', 'first-post', 'test body');
Здесь мы добавили строку в таблицу posts , заполнив поля: name , slug , body . Соответствующие этому порядку данные мы видим в скобках после ключевого слова VALUES .
Если же мы хотим оставить какие-то значения полей пустыми, то нужно просто опустить их при вставке.
Также можно вставить сразу несколько строк в таблицу следующим образом:
INSERT INTO posts (name, slug) VALUES ('my first post', 'first-post'), ('second post', 'second'), ('third post', 'third');
Еще можно сократить запись, если мы хотим заполнить все поля. Тогда после INSERT INTO tablename мы просто ничего не указываем в скобках. Это равносильно тому, если бы мы перечислили все поля таблицы.
INSERT INTO posts VALUES ('my first post', 'first-post', 'test body');
Заполнение таблицы в MS SQL через python
Создал программу, которая должна заполнить таблицу случайными значениями (для тестов). Вручную заполненная таблица и типы данных есть на прикрепленном изображении. Вот код:
import random import pypyodbc mySQLServer = "DESKTOP-1FN3B94\SQLEXPRESS" myDatabase = "Coachs" try: connection = pypyodbc.connect("Driver=;" "Server=" + mySQLServer + ";" "Database=" + myDatabase + ";") except: print("Ошибка подключения к базе данных") cursor = connection.cursor() names = ['Абакум', 'Абрам', 'Абросим'. ] sure_names = ['Абабков', 'Абакумов', 'Абалышев'. ] exams = ['ОГЭ,', 'ЕГЭ,', 'ОГЭ,ЕГЭ,'] subs = ['математика', 'русский язык'. ] areas = ['дзержинский', 'индустриальный', 'кировский'. ] streets = ['Ленина', ' Вагонная', 'Пушкина'. ] for i in range(3): age = random.randrange(20, 70) like = random.randrange(25, 100) dislike = random.randrange(2, 10) number = random.randrange(89012303027, 89090000000) price = random.randrange(400, 851) name = random.choice(names) + " " + random.choice(sure_names) area = random.choice(areas) + ",все" sub = random.choice(subs) exam = random.choice(exams) address_num = random.randrange(5, 105) address = random.choice(streets) + ", " + str(address_num) mySQLQuery = ("INSERT INTO dbo.Tutor_Info VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",(name, i + 6, str(number), age, area, exam, sub, like, dislike, price, address)) cursor.execute(mySQLQuery) connection.close()
А ошибку он выдает такую:
Traceback (most recent call last): File "C:/Users/Владелец/.PyCharmCE2019.2/config/scratches/База данных/ТЕст.py", line 41, in cursor.execute(mySQLQuery) File "C:\Users\Владелец\AppData\Local\Programs\Python\Python37\lib\site-packages\pypyodbc.py", line 1626, in execute self.execdirect(query_string) File "C:\Users\Владелец\AppData\Local\Programs\Python\Python37\lib\site-packages\pypyodbc.py", line 1650, in execdirect c_query_string = ctypes.c_char_p(query_string) TypeError: bytes or integer address expected instead of tuple instance Process finished with exit code 1