Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
104-155.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
122.82 Кб
Скачать

Обьектер-түрлері

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 жол негізіндегі үлкенбинарлық обьект.

Python – қосымшаларындағы деректер қоырмен жұмыс істеу

Дәрістің жалғасында нақты мысалдарда Python тіліндегі бағдарламның деректер қорымен қалай жұмыс істеу керек екені көрсетіледі. айта кететіні, мұнда сұрау тілінің білгірлігіне жету мақсаты қойылмайлы (бұл жеке курстың тақырыбы). Қарапайым мысалдар, Python-да бағдарламалау кезінде деректер қорына қолжетімділік басқа деректер көздеріне қолжетімділік қиын емес екенін (файлдарға, желілік обьектілерге), түсінуге көмектеседі.

Дәл сол үшін демонстрация үшін Unix ретінде және Windows ретінде жұмыс істейтін SQLite ДҚБЖ таңдалды. Жеке SQLite орнатудан бөлек (сайт http://sqlite.org) және Python (http://pysqlite.org) байланысты модулдермен, қандайда бір қосымша жөнге салу керек етпейді, SQLite деректер мәліметтерін жеке файлда сақтағандықтан: іле кестелерді құруға кірісу керек, деректерге кіргізуге және сұраулар жүргізуге болмайды. Таңдалған ДҚБЖ бір белгілі ерекшелігі бар: бір кішкене ерекше жағдайда, SQLite ДҚБЖ деректер түрлеріне көңіл аудармайды (ол барлық деректерде жол түрінде сақтайды), сондықтан Python үшін sqlite кеңейтілім модулі түрлерді түрлендіру бойынша қосымша жұмыс жасайды. Сонымен қатар, SQLite ДҚБЖ SQL92 стандартының жеткілікті үлкен қасиеттер жиынтығын қолдайды. SQLite тіпті транзакциялардыда қолдайтынын айту жеткілікті.

Тағыда қайталап айта кету керек, оқулы деректер қорын таңдау қолданылған құрылғылардың синтаксисіне әсер етпейді, себебі қолданылатын sqlite модулі DB-API 2.0 қолдайды, яғни кез келген басқа ДҚБЖ ауысу connect() функциясын шақыруындағы минималды өзгерісін қажет етеді және, мақсатты ДҚБЖ негізделген аса сәтті деректер түрлерін қолдануы мүмкін.

Деректер қорымен жұмыс істеу схемалы түрде былай көрінуі мүмкін:

  • Деректер қоырна қосылу (обьект-байланысының алынуымен connect() шақыру).

  • Бір немесе бірнеше курсорды құру (обьект-курсордың алынуымен cursor() обьект-байланыстың әдісін шақыру).

  • Командаларды немесе сұраныстарды орындау (execute() әдісін шақыру немесе оның нұсқаларын).

  • Сұраныстардың нәтижелерін алу (fetchone() әдісін шақыру немесе оның нұсқаларын)

  • Транзакцияны аяқтау немесе оның қайтарымын (commit() немесе rollback() обьект-байланысының әдісін шақыру).

  • Барлық керекті транзакциялар енгізілгенде, қосылу обьект-байланысының close() әдісінің шақырылуымен жабылады.

ДҚБЖ-мен танысу

Айталық, бағдарламалық қамтамасыз ету дұрыс орнатылған, және sqlite модулімен жұмыс істеуге болады. Тұрақты неге тең екенін қарау керек:

>>> import sqlite

>>> sqlite.apilevel

'2.0'

>>> sqlite.paramstyle

'pyformat'

>>> sqlite.threadsafety

1

Осыдан байқайтынымыз, sqlite DB-API 2.0 қолдайды, параметрлерді қою Python тілінің жолдарды форматтау стилінде орындалады, ал байланысты түрлі басқару ағындарымен (құлыпсыз) бірге қолдануға болмайды.

Деректер қорын құру

Деректер қорын құру үшін қандай кестелер (және басқа обьектер, мысалы индекстер) онда сақталатынын біліп алу керек, және де кесте құрылымын анықтау керек (атауларын және өріс түрлерін).

Тапсырма – телебағдарлама сақталатын деректер қорын құру. Бұр қорда төменде көрсетілген өрістердей кесте болады:

tvdate,

tvweekday,

tvchannel,

tvtime1,

tvtime2,

prname,

prgenre.

Мұндағы tvdate - күн, tvchannel-канал, vtime1және tvtime2-бағдарламаның бастапқы және соңғы уақыты , prname-атауы, prgenre-жанры. Әрине, бұл кестеде атқарушы тәуелділік бар (tvweekday tvdate және tvtime1 негізінде шығарылады), бірақ ДҚ практикалық түсінімінен қалыпты формаға келмейді. Сонымен қатар, кесте апта атауымен құрылатын болады (күн нөмері және апта күндерінің арасында сәйкестік орнатады).

weekday,

wdname.

Келесі сценарий деректер қорында кесте құрады (SQLite жағдайында деректер қорын құруды қадағалау қажет емес: файл автоматты түрде құрылады. Басқа деректер қоры үшін оның алдында деректер қорын құру қажет, мысалы, SQL-нұсқаулығы CREATE DATABASE ):

import sqlite as db

c = db.connect(database="tvprogram")

cu = c.cursor()

try:

cu.execute("""

CREATE TABLE tv (

tvdate DATE,

tvweekday INTEGER,

tvchannel VARCHAR(30),

tvtime1 TIME,

tvtime2 TIME,

prname VARCHAR(150),

prgenre VARCHAR(40)

);

""")

except db.DatabaseError, x:

print "Ошибка: ", x

c.commit()

try:

cu.execute("""

CREATE TABLE wd (

weekday INTEGER,

wdname VARCHAR(11)

);

""")

except db.DatabaseError, x:

print "Ошибка: ", x

c.commit()

c.close()

Мұнда жай ғана SQL-нұсқаулығы орындалуда, және деректер қорының қателігі өңделуде, егер осындай жағдай болса (мысалы, бар атаумен аталған кестені құру кезінде). Кестелер тәуелсіз құрылу үшін, commit() қолданылады.

Айтпақшы, кестелерді деректер қорынан өшіру келесідей болады:

import sqlite as db

c = db.connect(database="tvprogram")

cu = c.cursor()

try:

cu.execute("""DROP TABLE tv;""")

except db.DatabaseError, x:

print "Қате: ", x

c.commit()

try:

cu.execute("""DROP TABLE wd;""")

except db.DatabaseError, x:

print " Қате: ", x

c.commit()

c.close()

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]