- •Содержание
- •Концептуальная схема базы данных
- •Каноническая форма
- •Логическая схема базы данных
- •Физическая схема база данных
- •Метод доступа
- •Параметры запуска ядра субд MySql
- •Программа для взаимодействия
- •Программа для взаимодействия
- •Коды возврата
- •Innodb write io threads 4
- •Защита данных в бд
- •Restrictions and defaults
- •Реализация взаимодействия с бд
- •Функции
- •Контрольный пример
- •Программный код
Restrictions and defaults
OS: Windows 10
Режим работы: интерактивный
циклический
Поток вывода: консоль
Programming language: python
Preprocessor: py
Compiler: CPython
Файл лога: log.txt – пользователь не вводит адрес для файла лога, он находится по умолчанию (либо создается сам) там же, где программа
Схема
Реализация взаимодействия с бд
Подключение к базе данных осуществляется сервером приложений путем вызова функции:
mysql_real_connect(connection,mysql_details.server, mysql_details.user, mysql_details.password, mysql_details.database, 0, nullptr, 0))
Параметры:
server = "localhost"; - где находится база данных MySQL
user = "UNIVERSITY"; - администратор БД
password = "nekxBOnlmlQlX"; - пароль от базы данных
database = "RECORD_CARD"; - выбираемая база данных
connection = mysql_init(NULL); - создание экземпляра MySQL и инициализация переменных
Функции
def main ();
Функция main является главной функцией программы.
Выходные параметры отсутствуют.
def start() - инициализация времени старта, лога.
def finish(int ExitCode) - задание времени закрытия программы, закрытие файла лога.
def diag(int ExitCode) - диагностика ошибок, обработка кодов возврата.
def mysql_connection_setup(struct connection_details mysql_details) - настройка SQL соединения.
def mysql_add(MYSQL connection) - добавление данных в базу данных.
def mysql_select(MYSQL connection) – выбор данных из базы данных.
def SQL_Close() – закрытие соединения с базой данных.
def menu(MYSQL connection) - вывод меню.
Контрольный пример
Запускаем .py. Выбираем из контекстного меню вариант «Добавить студента».
Проверяем добавление студента в базу данных:
Выходим из программы:
Программный код
Листинг 1 – Исходный код проекта University_record_card.py
from getpass import getpass
from mysql.connector import connect, Error
import datetime
#Функция main является главной функцией программы.
def main():
start()
print("Enter start procedure/n")
#Подключение к СУБД
connection = mysql_connection_setup()
#Открытие функции меню
menu(connection)
#Инициализация времени старта, лога.
def start():
now = datetime.datetime.now()
#Вывод времени старта программы
print (now.strftime("%d-%m-%Y %H:%M"))
logfile = open("C:\Program Files(x86)\MySQL\var\log\mysql\mysql.log")
#Настройка SQL соединения
def mysql_connection_setup(struct connection_details mysql_details):
print("Enter mysql_connection_setup procedure.")
try:
with connect(
host="localhost",
user="UNIVERSITY",
password="nekxBOnlmlQlX",
database ="RECORD_CARD"
) as connection:
except Error as ExitCode:
diag(ExitCode)
print("Exit mysql_connection_setup procedure.")
return connection
#Вывод меню
def menu(MYSQL connection):
print("Menu/n")
print("Chose the option/n")
print("1) Add student name/n")
print("2) Get information/n")
print("3) Exit"/n)
user_input = input()
print("/n")
print(">Exit menu procedure./n")
#Обработка выбора пользователя
switch(user_input)
{
case 1: mysql_add(connection)
break;
case 2: mysql_select(connection)
break;
case 3: SQL_Close()
break;
}
#Добавление данных в базу данных
#Добавление данных студента пользователем
def mysql_add(MYSQL connection)
print("> Enter mysql_add procedure\n")
print("Student_name:")
_name = input()
print("Birthday:")
_birthday = input()
print("Student_bilet:")
_student_bilet = input()
transaction = mydb.cursor()
value.append(_name)
value.append(_birthday)
value.append(_student_bilet)
tuple(value)
try:
sql = "INSERT INTO STUDENTS (name, birthday,student_bilet) VALUES (%s, %s, %s)"
transaction.execute(sql, value)
mydb.commit()
print("Row added")
menu(connection)
except Error as ExitCode:
diag(ExitCode)
#Выбор данных из базы данных
#Вывод данных из таблицы СТУДЕНТ
def mysql_select(MYSQL connection)
try:
print("Student_name:")
name = input()
print("Birthday:")
birthday = input()
print("Student_bilet:")
student_bilet = input()
transaction = mydb.cursor()
transaction.execute("SELECT * FROM STUDENTS WHERE name = %s AND birthday = %s AND student_bilet = %s")
myresult = transaction.fetchone()
for x in myresult:
print(x)
menu(connection)
except Error as ExitCode:
diag(ExitCode)
#Закрытие соединения с базой данных
def SQL_Close():
mydb.close()
finish(ExitCode)
#Диагностика ошибок, обработка кодов возврата
def diag(int ExitCode)
#Обработка кодов возрата
switch(ExitCode)
{
#логируем и выбрасываем исключение типа Error, чтобы сообщить пользователю об ошибки подключения
case 1012: raise ExceptionError("He удается прочитать запись в системной таблице", Error);
transaction.Abort()
break;
#логируем и выбрасываем исключение типа Error, чтобы сообщить пользователю об ошибки подключения
case 1016: raise ExceptionError("He удается открыть файл", Error)
break;
#логируем и выбрасываем исключение типа Error, чтобы сообщить пользователю об ошибки подключения
case 1017: raise ExceptionError("He удается найти файл", Error)
break;
#логируем и выбрасиываем исключение типа Error, чтобы сообщить пользователю об ошибки подключения
case 1020: raise ExceptionError("Запись изменилась с момента последнего считывания таблицы", Error)
transaction.Abort()
break;
#логируем и выбрасываем исключение типа Error, чтобы сообщить пользователю об ошибки подключения
case 1023: raise ExceptionError("Ошибка при закрытии", Error)
break;
#логируем и выбрасываем исключение типа Error, чтобы сообщить пользователю об ошибки подключения
case 1024: raise ExceptionError("Ошибка при чтении файла", Error)
transaction.Abort()
break;
#логируем и выбрасываем исключение типа Error, чтобы сообщить пользователю об ошибки подключения
case 1032: raise ExceptionError("He удается найти запись", Error)
transaction.Abort()
break;
#логируем и выбрасываем исключение типа Error, чтобы сообщить пользователю об ошибки подключения
case 1037: raise ExceptionError("Недостаточно памяти; перезапустите сервер и повторите попытку (нужно сообщить админстратору)", Error)
transaction.Abort()
break;
#логируем и выбрасываем исключение типа Error, чтобы сообщить пользователю об ошибки подключения
case 1047: raise ExceptionError("Неизвестная ошибка (нужно сообщить админстратору)", Error)
transaction.Abort()
break;
#логируем и выбрасиываем исключение типа Error, чтобы сообщить пользователю об ошибки подключения
case 2003: raise ExceptionError("Не удается подключиться к серверу MySQL", Error)
break;
case 2050: raise ExceptionError("Нарушение ограничения целостности ", Error)
transaction.Abort()
break;
default:transaction.Abort()
break;
}
finish(ExitCode)
#Задание времени закрытия программы, закрытие файла лога
def finish(int ExitCode):
#Вывод времени закрытие программы
print (now.strftime("%d-%m-%Y %H:%M"))
print(f"End ended with code:", ExitCode)
print("End finish procedure")
#Закрытие лог файла
logfile.close()
stop(b'\r', 'Нажмите Enter для выхода')
main()
