Advertisement
sesquiipedalian

Первое задание

May 4th, 2023
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 14.77 KB | None | 0 0
  1. #1 Design tables for PhoneBook:
  2.  
  3. CREATE TABLE phonebook (
  4.     user_id SERIAL PRIMARY KEY,
  5.     first_name VARCHAR(50) NOT NULL,
  6.     last_name VARCHAR(50) NOT NULL,
  7.     phone_number VARCHAR(20) UNIQUE NOT NULL
  8. );
  9.  
  10. """
  11. Этот SQL-код создает новую таблицу с именем phonebook с четырьмя столбцами: user_id, first_name, last_name и phone_number.
  12.  
  13. CREATE TABLE phonebook:        Создает новую таблицу с именем phonebook.
  14.  
  15. user_id SERIAL PRIMARY KEY: Создает столбец user_id с типом данных SERIAL, который автоматически генерирует уникальные числовые значения при вставке новых строк. PRIMARY KEY означает, что значения в этом столбце должны быть уникальными, и каждая строка должна иметь значение в этом столбце (не NULL).
  16.  
  17. first_name VARCHAR(50) NOT NULL:        Создает столбец first_name с типом данных VARCHAR(50), который может хранить строковые значения длиной до 50 символов. NOT NULL указывает, что каждая строка должна иметь значение в этом столбце (не NULL).
  18.  
  19. last_name VARCHAR(50) NOT NULL:      Создает столбец last_name с типом данных VARCHAR(50), который может хранить строковые значения длиной до 50 символов. NOT NULL указывает, что каждая строка должна иметь значение в этом столбце (не NULL).
  20.  
  21. phone_number VARCHAR(20) UNIQUE NOT NULL:       Создает столбец phone_number с типом данных VARCHAR(20), который может хранить строковые значения длиной до 20 символов. UNIQUE указывает, что значения в этом столбце должны быть уникальными. NOT NULL указывает, что каждая строка должна иметь значение в этом столбце (не NULL).
  22. """
  23.  
  24. #2a
  25. # Implement two ways of inserting data into the PhoneBook:
  26. # a. Upload data from a CSV file:
  27.  
  28. import csv
  29. import psycopg2
  30.  
  31. def insert_data_from_csv(file_name):
  32.     conn = psycopg2.connect("your_connection_string")
  33.     cur = conn.cursor()
  34.  
  35.     with open(file_name, 'r') as f:
  36.         reader = csv.reader(f)
  37.         next(reader)  # skip the header
  38.         for row in reader:
  39.             cur.execute("INSERT INTO phonebook (first_name, last_name, phone_number) VALUES (%s, %s, %s)", row)
  40.  
  41.     conn.commit()
  42.     cur.close()
  43.     conn.close()
  44.  
  45. insert_data_from_csv("phonebook.csv")
  46.  
  47. """
  48.  
  49. Импортирует библиотеки csv и psycopg2. csv используется для работы с CSV-файлами, а psycopg2 - для работы с PostgreSQL.
  50. Определяет функцию insert_data_from_csv(file_name), которая принимает имя файла CSV.
  51.  
  52. Внутри функции insert_data_from_csv:
  53. a. Создается соединение с базой данных PostgreSQL с помощью строки подключения your_connection_string. Замените your_connection_string на вашу строку подключения к базе данных.
  54. b. Создается курсор, который будет использоваться для выполнения SQL-запросов.
  55. c. Открывает файл CSV с указанным именем файла (file_name) и создает объект reader для чтения содержимого файла.
  56. d. Пропускает заголовок файла CSV с помощью next(reader).
  57. e. Цикл for проходит по всем строкам файла CSV. Для каждой строки выполняется SQL-запрос INSERT INTO phonebook (first_name, last_name, phone_number) VALUES (%s, %s, %s) для вставки данных из строки CSV в таблицу phonebook.
  58.  
  59. После выполнения всех вставок, выполняется conn.commit() для сохранения изменений в базе данных.
  60. Закрывает курсор и соединение с базой данных.
  61. Вызывает функцию insert_data_from_csv("phonebook.csv") для вставки данных из файла phonebook.csv в таблицу phonebook. Замените имя файла на имя вашего файла CSV с данными телефонной книги.
  62.  
  63. """
  64.  
  65. #2b  Enter user name and phone from the console:
  66.  
  67. def insert_data_from_console():
  68.     conn = psycopg2.connect("your_connection_string")
  69.     cur = conn.cursor()
  70.  
  71.     first_name = input("Enter the first name: ")
  72.     last_name = input("Enter the last name: ")
  73.     phone_number = input("Enter the phone number: ")
  74.  
  75.     cur.execute("INSERT INTO phonebook (first_name, last_name, phone_number) VALUES (%s, %s, %s)", (first_name, last_name, phone_number))
  76.  
  77.     conn.commit()
  78.     cur.close()
  79.     conn.close()
  80.  
  81. insert_data_from_console()
  82.  
  83. """
  84.  
  85. Этот код на Python определяет функцию insert_data_from_console(), которая вставляет данные в таблицу phonebook из пользовательского ввода с консоли:
  86.  
  87. Внутри функции insert_data_from_console:
  88. a. Создается соединение с базой данных PostgreSQL с помощью строки подключения your_connection_string. Замените your_connection_string на вашу строку подключения к базе данных.
  89. b. Создается курсор, который будет использоваться для выполнения SQL-запросов.
  90. c. Запрашивает у пользователя имя (first_name), фамилию (last_name) и номер телефона (phone_number) через консоль с помощью функции input().
  91. d. Выполняется SQL-запрос INSERT INTO phonebook (first_name, last_name, phone_number) VALUES (%s, %s, %s) для вставки данных из пользовательского ввода в таблицу phonebook.
  92. После выполнения вставки, выполняется conn.commit() для сохранения изменений в базе данных.
  93. Закрывает курсор и соединение с базой данных.
  94. Вызывает функцию insert_data_from_console() для вставки данных из пользовательского ввода в таблицу phonebook. При вызове этой функции пользователю будет предложено ввести имя, фамилию и номер телефона через консоль.
  95.  
  96. """
  97.  
  98. #3 Implement updating data in the table (change user first name or phone):
  99.  
  100. def update_data(user_id, first_name=None, phone_number=None):
  101.     conn = psycopg2.connect("your_connection_string")
  102.     cur = conn.cursor()
  103.  
  104.     if first_name:
  105.         cur.execute("UPDATE phonebook SET first_name = %s WHERE user_id = %s", (first_name, user_id))
  106.     if phone_number:
  107.         cur.execute("UPDATE phonebook SET phone_number = %s WHERE user_id = %s", (phone_number, user_id))
  108.  
  109.     conn.commit()
  110.     cur.close()
  111.     conn.close()
  112.  
  113. update_data(1, first_name="New Name", phone_number="123-456-7890")
  114.  
  115.  
  116. """
  117.  
  118. Этот код на Python определяет функцию update_data(user_id, first_name=None, phone_number=None), которая обновляет данные в таблице phonebook в соответствии с предоставленными параметрами.
  119.  
  120. Внутри функции update_data:
  121. a. Создается соединение с базой данных PostgreSQL с помощью строки подключения your_connection_string. Замените your_connection_string на вашу строку подключения к базе данных.
  122. b. Создается курсор, который будет использоваться для выполнения SQL-запросов.
  123. c. Проверяет, задано ли значение first_name. Если да, выполняется SQL-запрос UPDATE phonebook SET first_name = %s WHERE user_id = %s, который обновляет значение first_name для записи с указанным user_id.
  124. d. Проверяет, задано ли значение phone_number. Если да, выполняется SQL-запрос UPDATE phonebook SET phone_number = %s WHERE user_id = %s, который обновляет значение phone_number для записи с указанным user_id.
  125. После выполнения обновлений, выполняется conn.commit() для сохранения изменений в базе данных.
  126. Закрывает курсор и соединение с базой данных.
  127. Вызывает функцию update_data(1, first_name="New Name", phone_number="123-456-7890") для обновления данных записи с user_id=1 в таблице phonebook. В качестве новых значений задаются имя "New Name" и номер телефона "123-456-7890".
  128.  
  129. """
  130.  
  131.  
  132. #4 Querying data from the tables (with different filters):
  133.  
  134. def query_data(first_name=None, last_name=None, phone_number=None):
  135.     conn = psycopg2.connect("your_connection_string")
  136.     cur = conn.cursor()
  137.  
  138.     query = "SELECT * FROM phonebook WHERE 1=1"
  139.     if first_name:
  140.         query += f" AND first_name = '{first_name}'"
  141.     if last_name:
  142.         query += f" AND last_name = '{last_name}'"
  143.     if phone_number:
  144.         query += f" AND phone_number = '{phone_number}'"
  145.  
  146.     cur.execute(query)
  147.     results = cur.fetchall()
  148.  
  149.     cur.close()
  150.     conn.close()
  151.     return results
  152.  
  153. print(query_data(first_name="John"))
  154.  
  155. """
  156.  
  157. Этот код на Python определяет функцию query_data(first_name=None, last_name=None, phone_number=None), которая выполняет запрос данных из таблицы phonebook с использованием предоставленных фильтров.
  158.  
  159. Внутри функции query_data:
  160. a. Создается соединение с базой данных PostgreSQL с помощью строки подключения your_connection_string. Замените your_connection_string на вашу строку подключения к базе данных.
  161. b. Создается курсор, который будет использоваться для выполнения SQL-запросов.
  162. c. Запрос начинается с основы SELECT * FROM phonebook WHERE 1=1. Условие 1=1 облегчает добавление дополнительных условий с использованием AND.
  163. d. Если задано значение first_name, добавляется условие AND first_name = '{first_name}'.
  164. e. Если задано значение last_name, добавляется условие AND last_name = '{last_name}'.
  165. f. Если задано значение phone_number, добавляется условие AND phone_number = '{phone_number}'.
  166. g. Выполняется SQL-запрос с учетом всех заданных условий.
  167. h. Извлекает все результаты запроса с помощью cur.fetchall() и сохраняет их в переменную results.
  168. Закрывает курсор и соединение с базой данных.
  169. Возвращает результаты запроса.
  170. Вызывает функцию query_data(first_name="John") и выводит результаты запроса на экран с помощью print(). В данном случае функция вернет все записи из таблицы phonebook, у которых значение first_name равно "John".
  171.  
  172. """
  173.  
  174. #5 Implement deleting data from tables by username or phone:
  175.  
  176. def delete_data(first_name=None, phone_number=None):
  177.     conn = psycopg2.connect("your_connection_string")
  178.     cur = conn.cursor()
  179.  
  180.     query = "DELETE FROM phonebook WHERE 1=1"
  181.     if first_name:
  182.         query += f" AND first_name = '{first_name}'"
  183.     if phone_number:
  184.         query += f" AND phone_number = '{phone_number}'"
  185.  
  186.     cur.execute(query)
  187.     conn.commit()
  188.  
  189.     cur.close()
  190.     conn.close()
  191.  
  192. delete_data(first_name="John")
  193. delete_data(phone_number="123-456-7890")
  194.  
  195.  
  196. """
  197.  
  198. Этот код на Python определяет функцию delete_data(first_name=None, phone_number=None), которая удаляет данные из таблицы phonebook с использованием предоставленных фильтров.
  199.  
  200. Внутри функции delete_data:
  201. a. Создается соединение с базой данных PostgreSQL с помощью строки подключения your_connection_string. Замените your_connection_string на вашу строку подключения к базе данных.
  202. b. Создается курсор, который будет использоваться для выполнения SQL-запросов.
  203. c. Запрос начинается с основы DELETE FROM phonebook WHERE 1=1. Условие 1=1 облегчает добавление дополнительных условий с использованием AND.
  204. d. Если задано значение first_name, добавляется условие AND first_name = '{first_name}'.
  205. e. Если задано значение phone_number, добавляется условие AND phone_number = '{phone_number}'.
  206. f. Выполняется SQL-запрос с учетом всех заданных условий.
  207. После выполнения удаления, выполняется conn.commit() для сохранения изменений в базе данных.
  208. Закрывает курсор и соединение с базой данных.
  209. Примеры вызовов функции:
  210. a. Вызывает функцию delete_data(first_name="John") для удаления всех записей из таблицы phonebook, у которых значение first_name равно "John".
  211. b. Вызывает функцию delete_data(phone_number="123-456-7890") для удаления всех записей из таблицы phonebook, у которых значение phone_number равно "123-456-7890".
  212.  
  213. """
  214.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement