Реляциялық деректер қорын басқару жүйесінің негізгі түсініктері
Реляциялық деректер қоры – бұл деректермен берілген кестелер жиынтығы.
Кесте – бұл жолдар мен бағандардан тұратын тік бұрышты матрица. Кесте қатынасты (relation) береді.
Жол – бағандар өрістерінен тұратын жазба. Әрбір өрісте кейбір мәндер болуы мүмкін, немесе арнайы NULL (бос) мәні. Кестеде бағандар саны кез келген болуы мүмкін. Реляциялық модель үшін бағандардың орналасу реті анықталмаған және маңызды емес.
Әрбір бағанның кестеде өзінің аты және түрі болады.
DB-API 2 дегеніміз не
Тақырыпшаға шығарылған аббревиатура екі ұғымды біріктіреді: DB (Database, деректер қоры) және API (Application Program Interface, қолданбалы бағдарлама интерфейсі).
Осылайша, DB-API деректер қорымен берілген қолданбалы бағдарлама интерфейсін анықтайды. Төменде сипатталған бұл интерфейс, деректер қорымен берілген Python – бағдарламасын байланыстыру үшін пайдаланылатын барлық кеңейтілген модульдерді жүзеге асыру керек. Біріңғай API (қазіргі сәтте оның екінші нұсқасы) маркадан қолданыстағы мәліметтер қорын елемеуге (абстрагироваться) мүмкіндік береді, қажет болған жағдайда тек бір ғана функциялар және әдістер жиынтығын біле отырып, бір ДҚБЖ басқасына өзгерту өте оңай.
DB-API 2.0 PEP 249-да мәлімделген (сайты http://www.python.org/peps/pep-0249.html/), және төменде келтірілген мәлімет дәл соған негізделген.
DB API 2.0 сипаттамасы
DB API 2.0 деректер қорымен жұмыс істеу үшін кеңейтілген модуль интерфейсін, қорлармен берілген байланыс-обьектісінің әдісін, ағымдағы өңделетін жазбаның меңзер-обьектісін, деректер түрлері және олардың конструкторлары үшін әртүрлі обьектілерін реттейді, сонымен қатар молульдерін жүзеге асырушы әзірлеушілер үшін ұсынымдарды қамтиды. Қазіргі таңда Python кеңейтілген модуль арқылы көптеген белгілі деректер қорын қолдайды. (http://www.python.org/topics/database/ адресі арқылы берілген веб-парақшасы арқылы көруге болады).
Модуль интерфейсі
Бұл жерде айта кететіні, DB-API 2.0 талаптарын қанағаттандыру үшін модульдерді ұсынуы тиіс.
Деректер қорына қол жетімділік байланыс – обьектісі арқылы жүзеге асырылады (connection object). Байланыс – обьектісінің классы үшін DB-API үйлесімді модуль connect() функция – конструкторын қамтамасыз етуі тиіс. Конструкторда параметрлер аттары келесідей болуы тиіс:
· dsn жол түріндегі деректер көзінің аты
· user Қолданушы аты
· password кілттік сөз
· host ДҚБЖ жұмыс жасайтын хост адресі
· database Деректер қорының аты.
Байланыс обьектісінің әдісі кейінірек қарастырылады.
Модуль оның негізгі мінездемелерінен тұратын тұрақтыларды анықтайды:
· apilevel. DB-API нұсқасы ("1.0" немесе "2.0").
· threadsafety. Басқарма хаттамаларын қолдану кезіндегі модуль мүмкіндіктерін сипаттайтын, бүтін тұрақты:
· 0 Модуль ағындарды қолдамайды.
· 1 Ағындар бірлесіп модулдерді қолдана алады, бірақ байланысты емес.
· 2 Ағындар бірлесіп модулдерді және байланысты қолдана алады.
· 3 Ағындар бірлесіп модулдерді, байланысты және курсорды қолдана алады (Мұндағы бірлесіп қолдану деп семафорлардың қолдануынсыз айтылған ресурстарды қолдану мүмкіндігі).
· paramstyle. Параметрлерді алмастырудағы белгілеулерді қолдану түрі. Бұл тұрақтының келесі мәндері болуы мүмкін:
· "format" ANSI C (мысалы, "%s", "%i") тіл стилінде форматтау.
· "pyformat" Python стиліндегі атулы форматтың спецификаторын қолдану ("%(item)s")
· "qmark" Параметрлер алмастыруларының орындарын белгілеу үшін.
· "numeric" позиция нөмерлерін қолдану (":1").
· "named" Алмастырылатын параметр атын қолдану (":name").
Модуль типтік ерекше жағдай оқиғаларын белгілеу үшін ерекше жағдайлар қатарын анықтау керек: Warning (ескерту), Error (қате), InterfaceError (интерфейс қателігі), DatabaseError (деректер қорына жататын, қате).Сонымен қатар соңғы ерекше жағдайдың ішкі класстары: DataError (деректерді өңдеудің қателігі), OperationalError (жұмыстағы қателік немесе деректер қорымен байланыстың үзілуі), IntegrityError (тұтас деректер қорының қателігі), InternalError (деректер қорының ішкі қателігі), ProgrammingError (бағдарламалық қателік, мысалы, SQL-сұрауының синтаксисіндегі қателік), NotSupportedError (сұралған қасиеттерді қолдау болмаған жағдайда).
Обьект – байланыс
connect() функциясын табысты шақыру нәтижесінде алынған, обьект – байланыстың келесідей әдістері болуы керек:
· close() Деректер қорымен берілген байланысты жабады.
· commit() Транзакцияны тоқтатады.
· rollback() Басталған транзакцияны ашады (бастапқы күйді қалпына келтіреді). Аяқталмаған транзакция кезінде байланысты жабу автоматты түрде транзакция шегерімін тудырады.
· cursor() Осы байланысты қолданушы обьект-курсорды қайтарады. Егер деректер қоры курсорды қабылдамаса, түйісу модулі оларды еліктеу керек.
Транзакция бойынша деректер қорын өзгертетін бір немесе одан көп операциялар группасы түсіндіріледі. Транзакция деректер қорындағы логикалық бөлінбейтін операцияларымен сәйкес, ал транзакцияны бөлшектеп орындау деректер қорының тұтастығының бұзылуына алып келеді. Мысалы, ақшаны бір шоттан басқа, бірінші шоттың азаюы бойынша және екіншісінің көбеюі, операцияларды аудару транзакция болып табылады. commit() және rollback() әдістері анық түрде транзакцияның басын және соңын білдіреді. Айтпақшы, деректер қорының барлық түрі емес транзакция механизімін қолдайды.
Айта кететіні, DB-API 2.0 модулін жүзеге асуына қарай, обьект-байланысына ,осы байланыстың курсор жұмысының қайталануында, ссылканы сақтау қажет. Көбінесе, обьект – байланысты кейбір атауға байланыстырмай, бірден обьект-курсорды алуға болмайтынын білдіреді. Және де обьект-байланысты функциядан немесе обьект-курсор әдісінен қайтара, локальды айнымалыда қалдыруға болмайды.
Объект-курсор
Курсор (ағылшынша cursor - CURrrent Set Of Records, ағындағы жазбалар жиынтығы) сұраныстың нәтижесімен жұмыс істеу үшін қызмет етеді. Сұраныстың нәтижесі әдетте жолдар-өрістерімен және жолдар-жазбаларымен берілген бір немесе бірнеше тік бұрышты кестелер болып табылады. Қосымша алынған кестелерді және кестедегі жазбаларды бір-бірден оқи және өңдеу алады, сондықтан курсорда ағындағы кесте және жазба жайлы мәліметтер сақталады. Нақты курсор кез келген уақытта SQL-нұсқаулығының бір рет орындалуымен байланысқан.
Обьект-курсорының атрибуттары DB-API анықталған:
· arraysize. Жазба санымен тең, fetchmany() әдісімен қайтарылатын атрибут. Үнсіз келісім бойынша 1-ге тең.
· callproc(procname[, params]). params өзгеретін реттілігіндегі параметрлермен берілген procname сақталған процедураны шақырады. Сақталған процедура кейбір реттілік параметрінің мәнін өзгерте алады. Әдіс, қолжетімділігі fetch – әдістерімен іске асатын, нәтижені қайтара алады.
· close(). Объект-курсорды жабады..
· description. Бұл тек оқу үшін арналған қолжетімді атрибут, жеті элементтік тізбектегі, тізбек болып табылады. Әрбір тізбектілік нәтиженің бір жолын сипаттайтын ақпаратты қамтиды:
· (name, type_code, display_size, internal_size, precision, scale, null_ok). Бірінші екі элемент міндетті (аты және түрі), ал қалғандарының (шығару үшін арналған өлшем, ішкі өлшем, дәлділік, масштаб, бос мәннің тапсырма мүмкіндігі) орнына None мәні болуы мүмкін.
· execute(operation[, parameters]). Деректер қорына немесе ДҚБЖ командасына сұраныс орындайды. Параметрлер (parameters), жоғарыда сиптталған paramstyle атрибутымен сәйкесінше, деректер қорында белгілер қабылданып ұсынылуы мүмкін.
· executemany(operation, seq_of_parameters). Берілген шаблонға параметрлерді қоя отырып сұраулар немесе командалар сериясын оырндайды. seq_of_parameters параметрі параметрлер жиынтығының тізбектілігін береді.
· fetchall(). Сұраныс нәтижесінің барлық жазбаларын қайтарады (немесе барлық қалған).
· fetchmany([size]). Тізбектің тізбектілігі түріндегі сұраныс нәтижесінің келесі көптеген жазбаларды қайтарады. Бос тізбектілік мәліметтердің жоқтығын білдіреді. size міндетті емес параметрі қайтарылатын жазбалардың санын көрсетеді (нақты қайтарылатын жазбалар аз болуы мүмкін). Үнсіз келісім бойынша size обьект-курсорының arraysize атрибутына тең.
· fetchone(). Сұраныс нәтижесінен немесе None мәліметтердің жоқтығынан келесі жазбаны қайтарады (тізбек түрінде).
· nextset(). Сұраныс нәтижесінен алынған, курсорды келесі мәліметтер жиынтығының басына аударады. Егер басқа жиынтық болмаса, None қайтарады. Деректер қорының барлығы бір операция ішінде бірнеше нәтиже жиынтығын қайтаруды қолдамайды.
· Rowcount. Соңғы сұранысты орындау нәтижесінен, алынған немесе қозғалған жазбалар саны. execute-сұраныстардың жоқтығы жағдайында немесе жазбалар санын көрсету 1-ге тең.
· setinputsizes(sizes). Операцияларда қолданылған параметрлер үшін, жады облысын алдын ала анықтайды. Әр элемент бір кіріс параметріне сәйкес келетін, sizes аргументі тізбектілікті береді. Элемент, жол ұзындығын беретін обьект-түрі параметрге немесе бүтін сандарға сәйкес, болуы мүмкін. Ол және де None мәніне ие болуы мүмкін, егер кіріс параметрінің өлшемі туралы, алдын ала немесе ол өте үлкен сияқты болжамалы болса, ештеңе айтуға болмайды. Әдіс execute-әдісіне дейін шақырылып қою керек.
· setoutputsize(size[, column]). column нөмерімен берілген жолдардағы, шығыс параметрі үшін буфер өлшемін орындайды. Егер column берілмесе, барлық үлкен шығыс параметрлері үшін әдіс өлшемдерді орнатады. Мысалы, үлкен бинарлық обьектілерді (Binary Large Object, BLOB) алу үшін қолданылуы мүмкін.
Обьектер-түрлері
DB-API 2.0 обьект-түрлері үшін атауын қарастыруда, деректер қорының өрістерін сипаттау үшін қолданылған:
Обьект | Түр |
STRING | Жол және символ |
BINARY | Бинарлы обьект |
NUMBER | Сан |
DATETIME | Күн және уақыт |
ROWID | Жазба идентификаторы |
None | NULL-мәні (жоқ мәндер) |
Әрбір деректер түрлерімен (шын мәнісінде бұл - класстар) конструктор байланысқан. DB-API үйлесімді модуль келесідей конструторларды анықтау керек:
· Date (жыл, ай,күн) Күн.
· Time (сағат, минут, секунд) Уақыт.
· Timestamp (жыл, ай, күн, сағат, минут,секунд) Күн-уақыт.
· DateFromTicks(secs) Ғасыр басынан(1 қаңтар 1970 жыл) secs секунд сан түріндегі күн.
· TimeFromTicks(secs) дәл сондай уақыт.
· TimestampFromTicks(secs) дәл сондай күн – уақыт.
· Binary(string) string жол негізіндегі үлкенбинарлық обьект.