From 1f6efe3fd0e38fdb32e640fbfd1463f90380aebc Mon Sep 17 00:00:00 2001 From: Boris Date: Wed, 25 Oct 2023 19:00:07 +0300 Subject: [PATCH 1/8] add def open_csv_file --- .gitignore | 3 ++- homework-1/main.py | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ddca7c863..990730a47 100644 --- a/.gitignore +++ b/.gitignore @@ -160,4 +160,5 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -.idea/ \ No newline at end of file +.idea/ +/pyproject.toml diff --git a/homework-1/main.py b/homework-1/main.py index 5b5e8ffd4..3e1e3698c 100644 --- a/homework-1/main.py +++ b/homework-1/main.py @@ -1 +1,12 @@ +import psycopg2 +import csv + +def open_csv_file(file): + with open(file, 'r') as csv_file: + csv_reader = csv.reader(csv_file) + return csv_reader + + """Скрипт для заполнения данными таблиц в БД Postgres.""" + + From c2d44c72ebe3b92adf3eb11220bceb170d68a966 Mon Sep 17 00:00:00 2001 From: Boris Date: Wed, 25 Oct 2023 20:02:21 +0300 Subject: [PATCH 2/8] add lines --- homework-1/create_tables.sql | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/homework-1/create_tables.sql b/homework-1/create_tables.sql index 2240c4efb..a5cad8126 100644 --- a/homework-1/create_tables.sql +++ b/homework-1/create_tables.sql @@ -1 +1,26 @@ -- SQL-команды для создания таблиц +CREATE TABLE employees +( + employee_id serial PRIMARY KEY, -- Используется 'serial' для автоматического увеличения значения + first_name varchar(20) NOT NULL, + last_name varchar(40) NOT NULL, + title text, + birth_date DATE, + notes text +); + +CREATE TABLE customers +( + customer_id CHAR(5) PRIMARY KEY, -- Устанавливается 'PRIMARY KEY' + company_name varchar(60), + contact_name varchar(70) +); + +CREATE TABLE orders +( + order_id serial PRIMARY KEY, -- Используется 'serial' для автоматического увеличения значения + customer_id CHAR(5) REFERENCES customers(customer_id), + employee_id int REFERENCES employees(employee_id), + order_date DATE, + ship_city varchar(30) +); From c9b2e358741b415dcb13d8657754371b7c5fde2e Mon Sep 17 00:00:00 2001 From: Boris Date: Wed, 25 Oct 2023 20:23:35 +0300 Subject: [PATCH 3/8] add lines with saving of tables --- homework-1/main.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/homework-1/main.py b/homework-1/main.py index 3e1e3698c..b45d997df 100644 --- a/homework-1/main.py +++ b/homework-1/main.py @@ -1,12 +1,29 @@ import psycopg2 import csv + def open_csv_file(file): with open(file, 'r') as csv_file: csv_reader = csv.reader(csv_file) return csv_reader +employees = open_csv_file('north_data/employees_data.csv') +customers = open_csv_file('north_data/customers_data.csv') +orders = open_csv_file('north_data/orders_data.csv') + """Скрипт для заполнения данными таблиц в БД Postgres.""" +db_config = { + 'dbname': 'north', + 'user': 'postgres', + 'password': '1975', + 'host': 'localhost' +} +with psycopg2.connect(**db_config) as conn: + with conn.cursor() as cur: + cur.executemany("INSERT INTRO employees VALUES(%S, %S, %S, %S, %S, %S)", [i for i in employees]) + cur.executemany("INSERT INTRO customers VALUES(%S, %S, %S)", [i for i in customers]) + cur.executemany("INSERT INTRO orders VALUES(%S, %S, %S, %S, %S)", [i for i in orders]) +conn.close() From 991a276b67db730984132e2eb23b0463a7f9748b Mon Sep 17 00:00:00 2001 From: Boris Date: Wed, 25 Oct 2023 20:28:26 +0300 Subject: [PATCH 4/8] changing lines in def open_csv_file --- homework-1/main.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homework-1/main.py b/homework-1/main.py index b45d997df..1d980abea 100644 --- a/homework-1/main.py +++ b/homework-1/main.py @@ -5,7 +5,8 @@ def open_csv_file(file): with open(file, 'r') as csv_file: csv_reader = csv.reader(csv_file) - return csv_reader + data = list(csv_reader) + return data employees = open_csv_file('north_data/employees_data.csv') From 3e1b9e5cb24f144109468f8f8438be810e518673 Mon Sep 17 00:00:00 2001 From: Boris Date: Wed, 25 Oct 2023 20:34:28 +0300 Subject: [PATCH 5/8] changing writing on the code --- homework-1/main.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/homework-1/main.py b/homework-1/main.py index 1d980abea..53602d3ed 100644 --- a/homework-1/main.py +++ b/homework-1/main.py @@ -24,7 +24,7 @@ def open_csv_file(file): with psycopg2.connect(**db_config) as conn: with conn.cursor() as cur: - cur.executemany("INSERT INTRO employees VALUES(%S, %S, %S, %S, %S, %S)", [i for i in employees]) - cur.executemany("INSERT INTRO customers VALUES(%S, %S, %S)", [i for i in customers]) - cur.executemany("INSERT INTRO orders VALUES(%S, %S, %S, %S, %S)", [i for i in orders]) + cur.executemany("INSERT INTRO employees VALUES(%s, %s, %s, %s, %s, %s)", [i for i in employees]) + cur.executemany("INSERT INTRO customers VALUES(%s, %s, %s)", [i for i in customers]) + cur.executemany("INSERT INTRO orders VALUES(%s, %s, %s, %s, %s)", [i for i in orders]) conn.close() From ed296d7b6898eab28596851503c5899384432134 Mon Sep 17 00:00:00 2001 From: Boris Date: Fri, 3 Nov 2023 13:02:49 +0200 Subject: [PATCH 6/8] add homework code --- homework-4/alter_student.sql | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/homework-4/alter_student.sql b/homework-4/alter_student.sql index d4f099c60..70b217bc9 100644 --- a/homework-4/alter_student.sql +++ b/homework-4/alter_student.sql @@ -1,19 +1,42 @@ -- 1. Создать таблицу student с полями student_id serial, first_name varchar, last_name varchar, birthday date, phone varchar +CREATE TABLE student +( + student_id serial, + first_name varchar, + last_name varchar, + birthday date, + phone varchar +); + -- 2. Добавить в таблицу student колонку middle_name varchar +ALTER TABLE student ADD COLUMN middle_name varchar; -- 3. Удалить колонку middle_name +ALTER TABLE student DROP COLUMN middle_name; + -- 4. Переименовать колонку birthday в birth_date +ALTER TABLE student RENAME birthday TO birth_date; + -- 5. Изменить тип данных колонки phone на varchar(32) +ALTER TABLE student ALTER COLUMN phone SET DATA TYPE varchar(32); + -- 6. Вставить три любых записи с автогенерацией идентификатора +INSERT INTO student (student_id, first_name, last_name, birth_date, phone) +VALUES + (1, 'Jon', 'Jayson', '1970.01.02', '456123'), + (2, 'Shay', 'Son', '1985.09.29', '789123'), + (3, 'Valentin', 'Ivanov', '1979.10.04', '789456'); -- 7. Удалить все данные из таблицы со сбросом идентификатор в исходное состояние + +TRUNCATE TABLE student RESTART IDENTITY \ No newline at end of file From ed2bf3c91cef0e021e6dbd5e0e83356b859af935 Mon Sep 17 00:00:00 2001 From: Boris Date: Sat, 4 Nov 2023 10:10:05 +0200 Subject: [PATCH 7/8] add homework code --- homework-4/alter_northwind.sql | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/homework-4/alter_northwind.sql b/homework-4/alter_northwind.sql index 852b12178..dba5a60ad 100644 --- a/homework-4/alter_northwind.sql +++ b/homework-4/alter_northwind.sql @@ -1,12 +1,19 @@ -- Подключиться к БД Northwind и сделать следующие изменения: -- 1. Добавить ограничение на поле unit_price таблицы products (цена должна быть больше 0) +ALTER TABLE products ADD CONSTRAINT chk_products_unit_price CHECK (unit_price > 0); -- 2. Добавить ограничение, что поле discontinued таблицы products может содержать только значения 0 или 1 +ALTER TABLE products ADD CONSTRAINT chk_products_discontinued CHECK (discontinued IN (0, 1)); -- 3. Создать новую таблицу, содержащую все продукты, снятые с продажи (discontinued = 1) +SELECT * INTO discontinued_products FROM products WHERE discontinued = 1; -- 4. Удалить из products товары, снятые с продажи (discontinued = 1) -- Для 4-го пункта может потребоваться удаление ограничения, связанного с foreign_key. Подумайте, как это можно решить, чтобы связь с таблицей order_details все же осталась. + +ALTER TABLE order_detailsDROP CONSTRAINT fk_orderdetails_products; +DELETE FROM products WHERE discontinued = 1; +ALTER TABLE order_details ADD CONSTRAINT fk_orderdetails_products FOREIGN KEY (product_id)REFERENCES products(product_id); From fa6dc72f3643801c8b97884673e89aad01fab593 Mon Sep 17 00:00:00 2001 From: Boris Date: Sun, 5 Nov 2023 12:57:05 +0200 Subject: [PATCH 8/8] change homework #4 code --- homework-4/alter_northwind.sql | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/homework-4/alter_northwind.sql b/homework-4/alter_northwind.sql index dba5a60ad..9c9064943 100644 --- a/homework-4/alter_northwind.sql +++ b/homework-4/alter_northwind.sql @@ -14,6 +14,11 @@ SELECT * INTO discontinued_products FROM products WHERE discontinued = 1; -- 4. Удалить из products товары, снятые с продажи (discontinued = 1) -- Для 4-го пункта может потребоваться удаление ограничения, связанного с foreign_key. Подумайте, как это можно решить, чтобы связь с таблицей order_details все же осталась. -ALTER TABLE order_detailsDROP CONSTRAINT fk_orderdetails_products; -DELETE FROM products WHERE discontinued = 1; -ALTER TABLE order_details ADD CONSTRAINT fk_orderdetails_products FOREIGN KEY (product_id)REFERENCES products(product_id); +ALTER TABLE products DROP CONSTRAINT fk_details_products; +-- новое ограничение с ON DELETE CASCADE +ALTER TABLE products +ADD CONSTRAINT fk_details_products +FOREIGN KEY (product_id) +REFERENCES products (product_id) +ON DELETE CASCADE; +DELETE FROM products WHERE discontinued = 1; \ No newline at end of file