You are on page 1of 17

Міністерство освіти і науки України

Донецький національний університет імені Василя Стуса


Фізико-технічний факультет
Кафедра комп’ютерних технологій

Лабораторна робота №8

Тема: Програмна робота з БД: Python DB API

Виконала:
Студентка 3 курсу
Спеціальності Комп’ютерні Науки
Групи Б17_Б/122В
Пивовар Ірина

Перевірив:
Завідувач навчальної лабораторії
програмного забезпечення
загального призначення
Жабська Єлизавета Олегівна

Вінниця – 2020
Контрольні питання
1. Перерахуйте модулі python, сумісні з DB API. У чому переваги кожного з
них?
SQLite - це БД яка зберігає базу в одному файлі і не вимагає окремого процесу для
запуску, при цьому використовує не стандартний варіант мови SQL. Такий підхід дозволяє
вбудувати sqlite прямо в програму, без необхідності установки сервера БД.
SQLite можна використовувати для зберігання внутрішніх даних програми
(наприклад FireFox зберігає куки в sqlite) або для створення прототипу додатка, а потім
перенести код в велику БД типу Postgres.
Модуль sqlite3 сумісний c DB-API 2.0 специфікацією, опіcаной в PEP 249.
Щоб використовувати цей модуль, ви повинні спочатку створити об'єкт
sqlite3.Connection який представляє базу даних.

2. Які можливості по роботі з БД є в python, крім DB API?


Модуль sqlite дає прекрасні можливості для побудови невеликих і швидких баз даних, проте
для повноти викладу пропонується огляд модулів розширення Python для інших СУБД.
Вище всюди імпортувався модуль sqlite, зі зміною його імені на db. Це було зроблено не
випадково. Справа в тому, що подібні модулі, що підтримують DB-API 2.0, є і для інших
СУБД, і навіть не в однині. Згідно з інформацією на сайті www.python.org DB-API 2.0-сумісні
модулі для Python мають наступні СУБД або протоколи доступу до БД:
zxJDBC Доступ по JDBC.
MySQL Для СУБД MySQL.
mxODBC Доступ по ODBC, продається фірмою eGenix.
DCOracle2, cx_Oracle Для СУБД Oracle.
PyGresQL, psycopg, pyPgSQL Для СУБД PostgreSQL.
Sybase Для Sybase.
sapdbapi Для СУБД SAP.
KInterbasDB Для СУБД Firebird (це нащадок Interbase).
PyADO Адаптер до Microsoft ActiveX Data Objects (тільки під Windows).
Для СУБД PostgreSQL потрібно взяти не PyGreSQL, а psycopg, так як в першому є
невеликі проблеми з типом для дати і часу при вставці параметрів в методі execute (). Крім
того, psycopg оптимізований для швидкості і багатопоточності ( psycopg.threadsafety = 2).
3. Як встановити модуль MySQLdb?
MySQLdb - це інтерфейс для підключення до сервера баз даних MySQL з Python. Він
реалізує Python Database API версії 2.0 і побудований поверх API MySQL C.
Перш ніж продовжити, переконайтеся, що на вашому комп'ютері встановлена
MySQLdb. Просто введіть наступне в свій скрипт Python і виконайте його:
#!/usr/bin/python import MySQLdb
Якщо він проводить наступний результат, то це означає, що модуль MySQLdb не
встановлено:
Traceback (most recent call last): File "test.py", line 3, in <module> import MySQLdb
ImportError: No module named MySQLdb
Щоб встановити модуль MySQLdb, використовуйте наступну команду:
Для Ubuntu, використовуйте наступну команду:
$ sudo apt-get install python-pip python-dev libmysqlclient-dev
Для Fedora, використовуйте наступну команду:
$ Sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc
Для командного рядка Python використовуйте наступну команду:
pip install MySQL-python
Переконайтеся, що у вас є привілей root для установки модуля.
Підключення до бази даних
Перш ніж підключитися до бази даних MySQL , переконайтеся в наступному:
Ви створили базу даних TESTDB.
Ви створили таблицю EMPLOYEE в TESTDB.
У цій таблиці є поля FIRST_NAME, LAST_NAME, AGE, SEX and INCOME.
Ідентифікатор користувача «testuser» і пароль «test123» встановлені для доступу до
TESTDB.
Модуль Python MySQLdb встановлений правильно на вашому комп'ютері.
Ви вивчили керівництво MySQL , щоб зрозуміти основи MySQL.
Нижче наведено приклад підключення до бази даних MySQL "TESTDB"
#!/usr/bin/python import MySQLdb # Открыть соединение с базой данных db =
MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # Подготовка объекта cursor с
помощью метода cursor() cursor = db.cursor() # Выполните SQL-запрос с помощью метода
execute() cursor.execute("SELECT VERSION()") # Получить одну строку с помощью метода
fetchone() data = cursor.fetchone() print "Версия базы данных : %s " % data # отключение от
сервера db.close()
Результат даного скрипта на нашій машині Linux буде наступний:
Версия базы данных : 5.7.23
Якщо з'єднання встановлено з джерелом даних, об'єкт підключення повертається і
зберігається в db для подальшого використання, в іншому випадку для db встановлено
значення None. Потім об'єкт db використовується для створення об'єкта- курсора , який, в
свою чергу, використовується для виконання SQL-запитів. Нарешті, перш ніж вийти, він
гарантує, що з'єднання з базою даних буде закрито і ресурси будуть звільнені.
Створення таблиці бази даних
Після встановлення з'єднання з базою даних ми готові створювати таблиці або записи
в таблицях бази даних, використовуючи метод execute створеного курсора.
операція READ
Операція READ в будь-якій базі даних означає отримання деякої корисної інформації
з бази даних.
Як тільки наше з'єднання з базою даних буде встановлено, ви готові зробити запит в
цю базу даних. Ви можете використовувати метод fetchone () для отримання одного методу
запису або fetchall () для отримання кількох значень з таблиці бази даних.
fetchone () - вибір наступного рядка набору результатів запиту. Набір результатів -
це повертається об'єкт, коли об'єкт курсора використовується для запиту таблиці.
fetchall () - витягує всі рядки в результуючому наборі. Якщо деякі рядки вже
витягнуто з набору результатів, то він витягує залишилися рядки з набору результатів.
rowcount - це атрибут тільки для читання і повертає кількість рядків, на які вплинув
метод execute ().
4. Яким чином задаються параметри підключення до БД, і які основні
параметри необхідно вказати?
Схематично робота з базою даних може виглядати приблизно так:
Підключення до бази даних (виклик connect () з отриманням об'ектасоедіненія).
Створення одного або декількох курсорів (виклик методу об'ектасоедіненія cursor () з
отриманням об'єкта-курсора).
Виконання команди або запиту (виклик методу execute () або його варіантів).
Отримання результатів запиту (виклик методу fetchone () або його варіантів).
Завершення транзакції або її відкат (виклик методу об'єкта-з'єднання commit () або
rollback ()).
Коли всі необхідні транзакції проведені, підключення закривається викликом методу
close ( об'єкта-з'єднання. метод executemany () об'єкта-курсора використовує другий параметр
послідовність - для масового введення даних з допомогою SQL-інструкції INSERT.
Конструктор повинен мати такі іменовані параметри:
dsn Назва джерела даних у вигляді рядка
user Ім'я користувача
password Пароль
host Адреса хоста, на якому працює СУБД
database Ім'я бази даних.
Методи об'єкта-з'єднання будуть розглянуті трохи пізніше. Модуль визначає
константи, що містять його основні характеристики:
apilevel Версія DB-API ( "1.0" або "2.0").
threadsafety Цілочисельна константа, що описує можливості модуля при використанні
потоків управління:
0 Модуль не підтримує потоки.
1 Потоки можуть спільно використовувати модуль, але не з'єднання.
2 Потоки можуть спільно використовувати модуль і з'єднання.
3 Потоки можуть спільно використовувати модуль, з'єднання і курсори. (Під спільним
використанням тут розуміється можливість використання згаданих ресурсів без
застосування семафорів).
paramstyle Тип використовуваних позначок при підстановці параметрів.
Можливі такі значення цієї константи:
o "format" Форматування в стилі мови ANSI C (наприклад, "% s", "% I").
o "pyformat" Використання іменованих специфікаторів формату в стилі Python ( "%
(item) s")
o "qmark" Використання знаків "?" для позначки місць підстановки параметрів.
o "numeric" Використання номерів позицій ( ": 1").
o "named" Використання імен підставляється параметрів ( ": name").
5. Що таке курсор? Перерахуйте його основні методи і їх призначення?
Курсор ( від англ. Cursor - CURrrent Set Of Records, поточний набір записів ), щоб
виконувати завдання результатом запиту. Результатом запиту зазвичай є одна або декілька
прямокутних таблиць за допомогою стовпців-полями і рядками-записами. Додаток може
читати і обробляти отримані таблиці і записи в таблиці по одній, тому в курсорі зберігається
інформація про поточну таблиці і записи. Конкретний курсор в будь-який момент часу
пов'язаний з виконанням однієї SQL-інструкції.
Застосування курсорів дозволяє додатку виконувати вибірку однієї або декількох
рядків за одну операцію вилучення даних. Також курсори підтримують можливість
застосування операторів UPDATE , INSERT та DELETE до поточної позиції курсора.
Для використання курсора слід встановити з'єднання з базою даних і встановити
потрібні значення атрибутів оператора, який контролює поведінку курсора.
Для використання курсора необхідно зробити наведене нижче:
Встановити атрибути курсора, викликавши функцію SQLSetStmtAttr . Ця функція
дозволяє встановлювати такі атрибути: SQL_ATTR_CURSOR_TYPE і
SQL_ATTR_CONCURRENCY , або SQL_CURSOR_SCROLLABLE і
SQL_CURSOR_SENSITIVITY .
Визначте розмір результуючого набору, викликавши функцію SQLSetStmtAttr з
атрибутом SQL_ATTR_ROW_ARRAY_SIZE .
Для того щоб використовувати позиційований SQL-оператор з фразою WHERE
CURRENT OF, слід визначити ім'я курсору, викликавши функцію SQLSetCursorName .
Для створення результуючого набору слід виконати SQL-оператор SELECT ,
викликавши функцію SQLExecute або функцію SQLExecDirect .
6. Які види курсорів підтримує DB API?
Курсори Transact-SQL засновані на синтаксисі DECLARE CURSOR і в основному
використовуються в скриптах, збережених процедурах і тригерах Transact-SQL. Transact-SQL
реалізуються на сервері і управляються інструкціями Transact-SQL, що відправляються від
клієнта серверу. Вони також можуть міститися в пакетах, збережених процедурах або
тригерах.
Серверні курсори інтерфейсу прикладного програмування (API)
Курсори API підтримують функції курсорів API в OLE DB і ODBC. Курсори API
реалізуються на сервері. Всякий раз, коли клієнтське додаток викликає функцію курсора API,
постачальник OLE DB або драйвер ODBC для свого клієнта SQL Server передає вимога на
сервер для виконання дії щодо серверного курсора API.
Клієнтські курсори реалізуються внутрішньо драйвером ODBC для свого клієнта SQL
Server і бібліотекою DLL, що реалізує API-інтерфейс ADO. Клієнтські курсори реалізуються
за допомогою кешування всіх рядків результуючого набору на клієнті. Кожен раз, коли
клієнтське додаток викликає функцію курсора API, драйвер ODBC для свого клієнта SQL
Server або ADO DLL виконує операцію курсору на рядках результуючого набору, кешованих
на клієнті.
запит курсора
SQL Server підтримує два методи запиту курсорів.
Transact-SQL
Мова Transact-SQL підтримує синтаксис для використання курсорів, створених
відповідно до синтаксисом курсорів ISO.
API-функції курсорів бази даних.
SQL Server підтримує функціональність курсорів для наступних API-інтерфейсів баз
даних:
ADO (Microsoft ActiveX Data Object);
OLE DB
відкритий інтерфейс доступу до баз даних (ODBC).
Обидва ці способи ніколи не повинні використовуватися в додатку одночасно.
Додаток, що використовує API-інтерфейс для визначення режиму роботи курсорів, не може
потім виконати інструкцію Transact-SQL DECLARE CURSOR і замовте новий курсора
Transact-SQL. Інструкція DECLARE CURSOR може використовуватися тільки в тому
випадку, якщо всі атрибути API-курсорів будуть встановлені в значення за замовчуванням.
Якщо не було запитано ні Transact-SQL, ні API-курсор, SQL Server цілком повертає за
замовчуванням результуючий набір з додатком (це називається результуючим набором за
замовчуванням).
Курсові методи
.callproc ( ім'я [, параметри ])
(Цей метод не є обов'язковим, оскільки не всі бази даних забезпечують збережені
процедури. [3] )
Викличте збережену процедуру бази даних із заданим іменем. Послідовність
параметрів повинна містити один запис для кожного аргументу, який очікує процедура.
Результат виклику повертається як змінена копія послідовності введення. Вхідні параметри
залишаються недоторканими, параметри виводу та вводу / виводу замінюються можливо
новими значеннями.
Процедура також може передбачати набір результатів як вихід. Потім це потрібно
зробити доступним за допомогою стандартних методів .fetch * () .
.close ()
Закрийте курсор зараз (а не коли буде викликано __del__ ).
Курсор буде непридатним з цієї точки вперед; помилки (або підклас) буде порушено
виняток , якщо будь-яка операція виконується спроба за допомогою курсору.
.execute ( операція [, параметри ])
Підготувати та виконати операцію з базою даних (запит чи команда).
Параметри можуть надаватися як послідовність або відображення і будуть прив’язані
до змінних в операції. Змінні задаються в специфічних для бази даних позначеннях
(детальніше див. Атрибут paramstyle модуля ). [5]
Курсор збереже посилання на операцію. Якщо той самий об’єкт операції передається
знову, курсор може оптимізувати його поведінку. Це найбільш ефективно для алгоритмів, де
використовується одна і та ж операція, але різні параметри до неї пов'язані (у багато разів).
Для максимальної ефективності при повторному використанні операції найкраще
скористатися методом .setinputsize (), щоб достроково вказати типи та розміри параметрів.
Доцільно, щоб параметр не відповідав заздалегідь заданій інформації; впровадження має
компенсувати, можливо, втратою ефективності.
Параметри також можуть бути вказані як список кортежів, наприклад, щоб вставити
кілька рядків за одну операцію, але такий тип використання застарілий: замість цього слід
використовувати .executemany () .
Повернені значення не визначені.
.executemany ( операція , seq_of_parameters )
Підготуйте операцію з базою даних (запит чи команда), а потім виконайте її проти
всіх послідовностей параметрів або відображень, знайдених у послідовності
seq_of_parameters .
Модулі вільно реалізувати цей метод, використовуючи кілька викликів методу
.execute () або використовуючи операції масиву, щоб база даних обробляла послідовність в
цілому за один виклик.
Використання цього методу для операції, яка виробляє один або більше наборів
результатів, є невизначеною поведінкою, і реалізація дозволена (але не вимагається), щоб
створити виняток, коли виявить, що набір результатів був створений за допомогою виклику
операції.
Ті ж коментарі, що і для .execute (), також застосовуються до цього методу.
Повернені значення не визначені.
.fetchone ()
Отримайте наступний рядок набору результатів запиту, повернувши одну
послідовність або None, коли більше даних немає. [6]
Error (або підклас) збуджується виключення , якщо попередній виклик .Execute * () не
виробляє ніякого результуючого набору або виклик не був виданий ще.
.fetchmany ([ size = cursor.arraysize ])
Отримайте наступний набір рядків результату запиту, повертаючи послідовність
послідовностей (наприклад, список кортежів). Порожня послідовність повертається, коли
більше рядків немає.
Кількість рядків для отримання за виклик задається параметром. Якщо його не
вказано, масив курсора визначає кількість рядків, які потрібно отримати. Метод повинен
намагатися отримати стільки рядків, скільки вказано параметром розміру. Якщо це
неможливо через відсутність вказаної кількості рядків, може бути повернуто менше рядків.
Error (або підклас) збуджується виключення , якщо попередній виклик .Execute * () не
виробляє ніякого результуючого набору або виклик не був виданий ще.
Зверніть увагу, що параметр розміру пов'язаний з роботою . Для оптимальної
продуктивності зазвичай краще використовувати атрибут .arraysize . Якщо використовується
параметр розміру, то для нього найкраще зберігати те саме значення від одного виклику
.fetchmany () до наступного.
.fetchall ()
Вилучіть усі (залишил ися) рядки результату запиту, повернувши їх як послідовність
послідовностей (наприклад, список кортежів). Зауважте, що атрибут масиву курсора може
впливати на ефективність цієї операції.
Error (або підклас) збуджується виключення , якщо попередній виклик .Execute * () не
виробляє ніякого результуючого набору або виклик не був виданий ще.
.nextset ()
(Цей метод необов’язковий, оскільки не всі бази даних підтримують декілька наборів
результатів. [3] )
Цей спосіб змусить курсор перейти до наступного наявного набору, відкинувши будь-
які інші рядки з поточного набору.
Якщо немає більше наборів, метод повертає None . В іншому випадку він повертає
справжнє значення, а наступні виклики методам .fetch * () повертають рядки з наступного
набору результатів.
Error (або підклас) збуджується виключення , якщо попередній виклик .Execute * () не
виробляє ніякого результуючого набору або виклик не був виданий ще.
.магнітити розмір
Цей атрибут читання / запису вказує кількість рядків, які потрібно отримати за один
раз .fetchmany () . Значення за замовчуванням до 1 означає отримання одного рядка за один
раз.
Впровадження має дотримуватися цього значення стосовно методу .fetchmany () , але
вільне взаємодіяти з базою даних по одному рядку за раз. Він також може бути використаний
при реалізації .executemany () .
.setinputs Розміри ( розміри )
Це можна використовувати перед викликом до .execute * () для попереднього
визначення областей пам'яті для параметрів операції.
розміри задаються як послідовність - по одному елементу для кожного вхідного
параметра. Елемент повинен бути об'єктом типу, який відповідає вхідному коду, або він
повинен бути цілим числом, що вказує максимальну довжину параметра рядка. Якщо
елемент " Ні" , то для цього стовпця не буде зарезервовано жодна попередньо визначена
область пам'яті (це корисно, щоб уникнути заздалегідь заданих областей для великих входів).
Цей метод застосовуватиметься до виклику методу .execute * () .
Впровадження цього способу вільне, щоб цей метод нічого не робив, а користувачі не
можуть ним користуватися.
.setoutputsize ( розмір [, стовпець ])
Встановіть розмір буфера для стовпців для великих великих стовпців (наприклад,
LONG s, BLOB s тощо). Стовпець задається як індекс у послідовності результатів. Якщо не
вказати стовпець, встановити розмір за замовчуванням для всіх великих стовпців курсору.
Цей метод застосовуватиметься до виклику методу .execute * () .
Впровадження цього способу вільне, щоб цей метод нічого не робив, а користувачі не
можуть ним користуватися.
7. Як можна дізнатися назви стовпців таблиці і їх типи?
Я не прошу SHOW COLUMNS команди.
Я хочу створити додаток, який працює аналогічно heidisql, де ви можете вказати SQL-
запит і після його виконання повертає набір результатів із рядками та стовпцями, що
представляють ваш результат запиту. Імена стовпців у наборі результатів повинні
відповідати вибраним стовпцям, як визначено у вашому SQL-запиті.
У моїй програмі Python (використовуючи MySQLdb ) мій запит повертає лише
результати рядків та стовпців, але не імена стовпців. У наступному прикладі імена стовпців
будуть ext , totalsize і filecount . З часом SQL буде зовнішнім від програми.
8. Як отримати id записи, яка була додана в таблицю за допомогою
команди INSERT (без вказівки id)?
Як видно з назви, оператор ввв використовується для вставлення (додавання) рядків в
таблицю бази даних. Додавання можна здійснити кількома шляхами:
 - добавити один повний рядок;
 - добавити частину нового рядка;
 - добавити результати запиту.
Отже, щоби добавити новий рядок в таблицю, нам потрібно вказати назву таблиці,
перелічити назви колонок та вказати значення для кожної колонки за допомогою
конструкції INSERT INTO назва_таблиці (поле1, поле2 ...) VALUES (значення1,
значення2 ...). Розглянемо на прикладі.
INSERT INTO Sellers (ID, City, Seller_name) VALUES ('6', 'Los Angeles', 'Harry
Monroe')
Додавання відібраних даних
В попередній прикладах ми вставляли дані в таблиці, прописуючи їх вручну в запиті.
Проте оператор 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
9. Як можна дізнатися кількість записів, які були змінені в результаті
виконання команди UPDATE?

import MySQLdb
db = MySQLdb.connect(host='localhost',
user='root',
passwd='1q2w3e4r',
db='test_database')
cur = db.cursor()
cur.execute('''
UPDATE test_database.names_table
SET Last_Name = 'Smith-Jackson',
Age = 35
WHERE First_Name = 'Maria'
''')
db.commit()

10.Як виконується підстановка параметрів в SQL-запит. Чому для


підстановки значень в SQL-запит можна використовувати операції з
рядками (такі як +)?
Якщо ви не знайомі з Python DB-API, зауважте що SQL запит переданий cursor.execute ()
використовує підстановку параметром, "% s", замість безпосереднього додавання їх в рядок
SQL запиту. При використанні такого підходу, бібліотека для роботи з поточної базою даної
автоматично екранує параметри.
Якщо операція порівняння в запиті повинна повернути всі рядки, що містять рядки LIKE
'абв' (з символом пробілу на кінці), то рядок, що містить "абв" (без пробілу), не буде
повернута. Однак завершальні прогалини в вираженні, з яким порівнюється шаблон, не
враховуються. Якщо операція порівняння в запиті повинна повернути всі рядки, що містять
рядки LIKE 'абв' (без знака пробілу на кінці), то будуть повернуті всі рядки, що містять
«абв», як із завершальними пробілами, так і без них.
11.Що станеться, якщо при виконанні запиту на сервері БД відбудеться
помилка? як програма може обробити таку помилку?
Повний повідомлення: Сервера звітів невдалої спроби здійснити дзвінок з базою
даних сервера звітів. Для виконання запитів і обробки даних потрібно з'єднання з базою
даних ». (RsReportServerDatabaseUnavailable)
Ця помилка з'являється, якщо сервер звітів не може з'єднатися з реляційною базою
даних SQL Server, яка забезпечує внутрішнє сховище для сервера. З'єднання з базою даних
сервера звітів управляється за допомогою програми настройки служб Reporting Services.
Можна запустити цю програму, перейти на сторінку «Налаштування бази даних» та
виправити відомості про з'єднання.
Щоб оновити інформацію про з'єднання рекомендується використання цієї програми;
вона гарантує, що залежні настройки будуть оновлені, а служби запущені заново.
Крім того, ця помилка може з'явитися в разі, якщо екземпляр компонента Database
Engine, що зберігає базу даних сервера звітів, не налаштований для віддалених з'єднань.
Віддалене з'єднання включено за замовчуванням в деяких випусках SQL Server. Щоб
перевірити, чи включено воно на екземплярі SQL Server Database Engine, запустіть диспетчер
конфігурації SQL Server. Необхідно включити як протокол TCP / IP, так і іменовані канали.
Сервер звітів використовує обидва ці протоколу.
Якщо ця помилка додатково містить наступний текст, значить у облікового запису,
що використовується для запуску екземпляра ядра СУБД, минув час дії пароля: "При
з'єднанні з сервером сталася помилка. При підключенні до SQL Server ця помилка може бути
викликана тим, що в конфігурації за замовчуванням SQL Server не дозволяє віддалені
з'єднання ". (Постачальник: мережеві інтерфейси SQL Server, помилка: 26 - помилка при
пошуку зазначеного сервера / примірника). "Щоб усунути цю помилку, встановіть пароль
заново.
«Сервер RPC прослуховується»
Служба сервера звітів для деяких операцій використовує сервер віддаленого виклику
процедур (RPC). Якщо з'являється помилка «Сервер RPC прослуховується», перевірте, чи
працює служба сервера звітів.
Непередбачена помилка (загальна мережева помилка)
Це повідомлення про помилку вказує на помилку з'єднання з джерелом даних. В
цьому випадку необхідно перевірити рядок з'єднання і переконатися в наявності дозволу на
доступ до джерела даних. Якщо для доступу до джерела даних використовується перевірка
справжності Windows, то потрібен дозвіл на доступ до комп'ютера, на якому розташований
цей джерело даних.
Неможливість надання доступу до бази даних в центрі адміністрування SharePoint
Якщо ви налаштували в Reporting Services інтеграцію з продуктом або технологією
SharePoint на Windows Vista або Windows Server 2008, то при спробі надати доступ на
сторінці Надання доступу до бази даних в центрі адміністрування SharePoint може з'явитися
таке повідомлення про помилку: "Не вдається встановити з'єднання з комп'ютером ".
Є два можливих варіанти вирішення цієї проблеми.
У першому случає можна тимчасово відключити контроль облікових записів і
використовувати центр адміністрування SharePoint для надання доступу.
Надання доступу до бази даних вручну
Додайте обліковий запис служби сервера звітів в групу WSS_WPG Windows на
комп'ютері Reporting Services.
Виконайте з'єднання з примірником бази даних, в якому розташовані бази даних
конфігурації та вмісту SharePoint, і створіть ім'я входу бази даних SQL для облікового запису
служби сервера звітів.
Додайте ім'я входу бази даних SQL для наступних ролей баз даних.
роль db_owner role в базі даних WSS Content
роль WSS_Content_Application_Pools в базі даних SharePoint_Config.

12.Наведіть кілька прикладів ситуацій, в яких використання транзакцій


дозволяє запобігти можливим помилкам і некоректну поведінку
програми.

 Транзакція – дія чи послідовність дій, котрі виконуються одним користувачем чи


прикладною програмою, що виконують доступ та/або зміну вмістимого БД.
Властивості транзакцій:
-          атомарність: це властивість типу „все чи нічого”. Кожна транзакція є
неподільною частиною роботи, котра може бути або виконана повністю, або не виконана
зовсім;
-          узгодженість: кожна транзакція переводить БД з одного узгодженого стану у
інший;
-          ізольованість: всі транзакції виконуються незалежно одна від одної. Тобто
проміжні результати однієї транзакції не повинні бути доступні для іншої;
-          тривалість: результати кожної зафіксованої транзакції не повинні бути втрачені
під час наступних збоїв.
Наведений перелік властивостей транзакцій в англомовній літературі носить назву
ACID (Atomicity, Consistency, Isolation, Durability).
Блокування – це процедура, що використовується для паралельного доступу до даних. Коли
якась транзакція отримує доступ до БД, механізм блокування дозволяє відхилити спроби
інших транзакцій отримати доступ до тих самих елементів.
Транзакції є основною одиницею відновлення у системах з базами даних. Транзакція
повинна бути відмінена, якщо вона не була закінчена до настання збою. Повторне виконання
транзакції виникає для тих з них, котрі завершились  до настання збою, але котрі ще не були
записані з оперативної пам’яті (буферу) на диски.
Для забезпечення можливості відновлення БД кожна СУБД повинна надавати
наступні функції: механізм резервного копіювання, ведення файлу журналу, створення
контрольних точок.
Резервне копіювання може виконуватись для всієї бази даних, а також для її окремих
частин. Як правило, резервні копії створюються на автономних носіях.
Ведення файлу журналу здійснюється для фіксації виконаних транзакцій. А саме:
ідентифікатор транзакції, тип транзакції (читання, вставка, поновлення), ідентифікатор
елементу даних – об’єкту транзакції, копія елементу даних до транзакції, копія елементу
даних після транзакції, записи контрольних точок. Рекомендується також вести файл
журналу на окремому від самої БД диску з метою уникнення одночасного пошкодження і
бази даних, і файлу журналу.
Для того, щоби при відновленні БД не виконувати повторно всі транзакції,
запротокольовані у файлі журналу, ведеться облік контрольних точок, які відмічаються через
встановлений інтервал часу. Під час створення контрольної точки виконуються також
операції по запису на диск з оперативної пам’яті змін до файлу журналу, змін у саму базу
даних, запис про контрольну точку.
Який із способів відновлення БД вибрати – відновлення з резервної копії чи
відновлення на основі файлу журналу – залежить від характеру пошкодження БД.
Тобто, використання новіших версій інтерпретатора Python 3 не повинно викликати
появу помилок при виконанні прикладів коду (де це необхідно, наводиться пояснення щодо
версії, яка використовується). Якщо необхідно дізнатися, що і коли було додано у різні версії
мови програмування Python.
Якщо ми не просто читаємо дані, а й вносимо зміни у базу даних - необхідно зберегти
транзакцію. Рядок conn.commit() дозволяє зберети поточні зміни.
Індивідуальні завдання

Предметна область: органайзер

Основні сутності: користувач системи, його контакти, заплановані зустрічі,


дзвінки, повідомлення, завдання. Кожен користувач має безліч контактів і може
планувати зустрічі з одним або одночасно з декількома з них. Користувач
переписується і телефонує кожним контактом окремо, і органайзер повинен
зберігати історію повідомлень. Також користувач може планувати завдання на
майбутнє, які, на відміну від дзвінків і зустрічей, не пов'язані з конкретними
контактами.
1. Напишіть програму, яка підключається до вашої БД засобами DB API і
дозволяє:
- виводити вміст однієї з основних таблиць;

Рисунок 1 - Виведення таблиць

- додавати, видаляти і редагувати рядки цієї таблиці

Рисунок 2 - Додавання рядків в таблиці


Рисунок 3 - Видалення рядків в таблиці

Рисунок 4 - Редагування рядків в таблиці

You might also like