Original on http://www.kitebird.com/articles/pydbapi.html

Paul DuBois paul@kitebird.com

Утрыманне

Python з'яўляецца адным з найболей папулярных моў праграмавання Крыніца Адкрыць, у значнай меры дзякуючы яго родным выразнасць, а таксама розныя падтрымка модуляў, якія даступныя для пашыраць яго магчымасці. Адзін з гэтых модуляў DB-API, які, як імя мае на ўвазе, падае прыкладны праграмны інтэрфейс базы дадзеных. DB-API прызначаны для адносна незалежнымі ад пэўных падрабязнасцяў для любой базы дадзеных, якія дапамогуць вам напісаць доступу да базы дадзеных сцэнараў, якія з'яўляюцца партатыўнымі паміж рухавікамі.

-API дызайн DB аналагічна таму, які выкарыстоўваў Perl і Ruby DBI модуляў PHP PEAR DB класа, і JDBC інтэрфейсу Java: ён выкарыстоўвае двухузроўневую архітэктуру, у якой верхні ўзровень падае абстрактны інтэрфейс, які аднолькавы для ўсіх падтрымоўваных СКБД, і ніжэйшы ўзровень, які складаецца з драйвераў для пэўных рухавікоў, якія апрацоўваюць рухавік-залежныя дэталі. Гэта азначае, вядома, выкарыстоўваць DB-API для напісання сцэнараў Python, вы павінны мець драйвера для вашай пэўнай сістэмы базы дадзеных. Для MySQL, DB-API забяспечвае доступ да базы дадзеных з дапамогай драйвера MySQLdb. Гэты дакумент пачынаецца з абмеркавання ўсталёўкі драйвераў (у выпадку, калі вы не MySQLdb), затым пераходзіць на вечка, як пісаць DB-API сцэнараў.

MySQLdb усталёўкі

Каб напісаць MySQL скрыпты, якія выкарыстоўваюць DB-API, Python сам павінен быць усталяваны. Гэта амаль напэўна будзе дакладна, калі вы выкарыстоўваеце Unix, але гэта меней верагодна для Windows. Усталёўнікі для любой платформы можна знайсці на вэб-сайце Python (гл. "Рэсурсы" часткі ў канцы гэтага дакумента).

Пераканаецеся, што ваша версія Python з'яўляецца 2.3.4 ці пазнейшай версіі, а модуль MySQLdb усталяваны. Вы можаце праверыць абое гэтыя патрабаванні, запусціўшы Python у інтэрактыўным рэжыме з каманднага радка (штосьці % для Unix ці C:\> для Windows):

 
   %python 
   Python 2.4.3 (#1, Aug 29 2006, 14:45:33)
   [GCC 3.4.6 (Gentoo 3.4.6-r1, ssp-3.4.5-1.0, pie-8.7.9)] on linux2
   Type "help", "copyright", "credits" or "license" for more information.
   >>> import MySQLdb 
Мяркуючы, што ў вас ёсць досыць сучасныя версіі Python і што памылка ўзнікае пры пытанні MySQLdb аператар import, вы гатовыя, каб пачаць пісаць доступу да базы дадзеных сцэнараў, і вы можаце перайсці да наступнай часткі. Аднак, калі вы атрымліваеце паведамленне пра памылку, неабходна атрымаць і ўсталяваць MySQLdb першы:
 
   >>> import MySQLdb 
   Traceback (most recent call last):
     File "<stdin>", line 1, in ?
   ImportError: No module named MySQLdb
Для атрымання MySQLdb, наведаеце "Рэсурсы" частка, каб убачыць, дзе для вымання размеркавання падыходны для вашай сістэмы. Скампіляваныя файлы могуць даступныя для вашай платформы, ці вы можаце ўсталяваць з зыходных тэкстаў. Пры выкарыстанні бінарнага дыстрыбутыва, усталюеце яго, выкарыстоўваючы звычайны пакет усталёўкі вашай платформы працэдуры. Для зборкі і ўсталёўкі з зыходнікаў, перайсці ў каталог верхняга ўзроўня размеркавання MySQLdb і ўвядзіце наступныя каманды. (У Unix, цалкам верагодна, што вы трэба будзе запусціць другую каманду, як корань так, што файлы драйвераў могуць быць скапіяваны ў вашай усталёўцы Python.)
 
   %python setup.py build 
   %python setup.py install 
Калі ў вас паўсталі праблемы, праверце файл README, уключаны ў дыстрыбутыў MySQLdb.

Кароткія DB-API сцэнара

Сцэнары, што доступ праз MySQL DB-API выкарыстаннем MySQLdb як правіла, выконваюць наступныя дзеянні:

  • Імпарт модуля MySQLdb
  • Адкрыць злучэнне з серверам MySQL
  • Рабіць заявы і атрымліваць іх вынікі
  • Зачыніць злучэнне з серверам
Пакінутая частка гэтай часткі ўяўляе сабою кароткі API сцэнар DB, які ілюструе асноўныя элементы гэтых крокаў. У наступных частках абмяркоўваюцца пэўныя аспекты Сцэнарны больш падрабязна.

Даць сцэнара

Выкарыстоўвайце тэкставы рэдактар для стварэння файла з імем server_version.py, які ўтрымоўвае наступны сцэнар. Гэты сцэнар выкарыстоўвае MySQLdb узаемадзейнічаць з серверам MySQL, хоць і ў адносна рудыментарных моды - усё гэта робіць, гэта папытаць сервер для сваёй версіі радка:

 
   # server_version.py - retrieve and display database server version
 
   import MySQLdb
 
   conn = MySQLdb.connect (host = "localhost",
                           user = "testuser",
                           passwd = "testpass",
                           db = "test")
   cursor = conn.cursor ()
   cursor.execute ("SELECT VERSION()")
   row = cursor.fetchone ()
   print "server version:", row[0]
   cursor.close ()
   conn.close ()
Аператар import кажа Python, што сцэнар павінен выкарыстоўваць код у модуль MySQLdb. Гэта заява павінна папярэднічаць любой спробе падлучэння да сервера MySQL. Тады злучэнне ўсталявана, высылаючыся на Connect () метад кіроўца MySQLdb з адпаведнымі параметрамі злучэння. Яны ўключаюць імя хаста, дзе сервер, імя карыстача і пароль для ўліковага запісу MySQL, і назва базы дадзеных, якія вы жадаеце выкарыстоўваць;. Звязацца (спіс аргументаў) сінтаксіс вар'іруецца сярод кіроўцаў для MySQLdb, аргументы могуць быць прыведзены ў імя = значэнне фармат, які мае тая перавага, што вы можаце паказаць іх у любым парадку testpass. server_version.py робіць падлучэнне да MySQL сервера на лакальным кампутары для доступу да тэставай базе дадзеных з імем карыстача і паролем TestUser і:
 
   conn = MySQLdb.connect (host = "localhost",
                           user = "testuser",
                           passwd = "testpass",
                           db = "test")
Калі звязацца () будзе паспяховым, ён вяртае аб'ект падлучэння, які служыць асновай для далейшага ўзаемадзеяння з MySQL. Калі выклік не атрымоўваецца, ён выклікае выключэнне. (Server_version.py не апрацоўвае выключэнне, так што памылка ў гэтай кропцы сканчаецца сцэнар. Апрацоўка памылак апісваецца пазней у гэтым дакуменце.)

Пасля падлучэння аб'екта быў атрыманы, server_version.py выклікае яго курсор () метад для стварэння аб'екта курсора для апрацоўкі заяў. Сцэнар выкарыстоўвае гэты курсор на пытанне SELECT VERSION () заява, якое вяртае радок, якая змяшчае інфармацыю пра версію сервера:

 
   cursor = conn.cursor ()
   cursor.execute ("SELECT VERSION()")
   row = cursor.fetchone ()
   print "server version:", row[0]
   cursor.close ()
Курсора аб'екта Execute () метад пасылае заяву на сервер і fetchone () вяртае радок, як картэж. Для заявы паказана тут, набор утрымоўвае адно значэнне, якое скрыпт друкуе. (Калі няма радка даступныя, fetchone () фактычна вяртае значэнне адсутнічае; server_version.py бестурботна мяркуе, што гэтага не адбудзецца, здагадка, што Вы звычайна не павінны рабіць справы. У наступных прыкладах, мы будзем звяртацца з гэтым.) Курсор аб'екты могуць быць скарыстаны для афармляюць шматразовыя заявы, але server_version.py больш няма неабходнасці курсор пасля атрымання радка версіі, таму ён зачыняе яе.

Нарэшце, сцэнар выклікае падлучэнне аб'екта блізка () для злучэння з серверам:

 
   conn.close ()
Пасля гэтага, сопп становіцца несапраўдным і не павінны выкарыстоўвацца для доступу да сервера.

Запуск сцэнара

Для выканання server_version.py сцэнар, выклічце Python з каманднага радка і сказаць яму імя скрыпту. Вы павінны ўбачыць вынік вось накшталт гэтага:

 
   %python server_version.py 
   server version: 5.1.12-beta-log
Гэта азначае, што версія сервера MySQL з'яўляецца 5.1.12;-і бэта-часопіса суфіксы кажуць нам стабільнасць узроўня размеркавання і гэты запыт уключана вядзенне часопіса. (Вы можаце ўбачыць іншыя суфіксы, чым паказана тут. Напрыклад, калі ў вас ёсць адладкі ўключаны, вы убачыце, адладкі суфікс.)

Можна стварыць сцэнар так, што яна можа быць запушчана па імі без прыцягнення Python у відавочным выглядзе. У Unix, дадаць пачатковыя #! Лініі сцэнар, які паказвае поўны шлях да інтэрпрэтатара Python. Гэта кажа сістэме, што праграма павінна выканаць сцэнар. Напрыклад, калі Python жыве ў / USR / BIN / Python на вашай сістэме, дадаць у якасці першай лініі сцэнара:

 
   #!/usr/bin/python
Затым з дапамогай CHMOD, каб зрабіць скрыпт выкананым, і вы зможаце запусціць яе прама:
 
   %chmod +x server_version.py 
   %./server_version.py 
(Кіроўны ". /" Кажа ваш камандны інтэрпрэтатар відавочна, што сцэнар знаходзіцца ў бягучым каталогу. Шматлікія рахункаў Unix ствараюцца не для пошуку бягучы каталог пры пошуку каманды.)

Пад Windows, #! Лінія непатрэбнай (хоць гэта бясшкодна, таму вам не трэба выдаліць яго, калі вы пішаце сцэнар на сістэмы Unix, а затым перамясціць яго ў акно Windows). Замест гэтага, вы можаце ўсталяваць імя файла асацыяцыі так што. Ру сцэнараў будзе злучана з Python. Замест выкарыстання CHMOD, каб зрабіць скрыпт выкананым, адкрыты пункт Налады тэчкі ў панэлі кіравання і абярыце сваю ўкладку Тыпы файлаў. Тыпы файлаў дазволіць вам стварыць асацыяцыю для файлаў, якія сканчаюцца. Ру сказаць Windows, каб выканаць іх з Python. Тады вы можаце выклікаць сцэнар па назве:

 
   C:\> server_version.py 
Калі вы ўсталёўваеце ActiveState Python на Windows, усталёўкі ActiveState стварае асацыяцыі аўтаматычна, як частка працэсу ўсталёўкі.

Больш шырокія DB-API сцэнара

server_version.py мае шэраг недахопаў. Напрыклад, ён не перахапляць выключэнні ці паказаць, што пайшло не так, калі адбываецца памылка, і яна не дапушчае магчымасць таго, што заява ён працуе, магчыма, не даў вынікаў. У гэтай частцы паказана, як вырашаць гэтыя праблемы з выкарыстаннем больш складаных сцэнараў, animal.py, які выкарыстоўвае табліцу, якая змяшчае назвы жывёл і катэгорыі:

 
   CREATE TABLE animal
   (
     name     CHAR(40),
     category CHAR(40)
   )
Калі вы чыталі DB PEAR дакумента даступныя на сайце Kitebird (гл. частку "Рэсурсы"), вы маглі б прызнаць гэту табліцу, і некаторыя з заяў, апублікаваных animal.py, яны былі скарыстаны ў гэтым дакуменце, таксама.

Animal.py сцэнар пачынаецца так (у тым ліку сістэмы #! Лініі, калі вы збіраецеся запусціць скрыпт на Unix):

 
   #!/usr/bin/python
   # animal.py - create animal table and
   # retrieve information from it
 
   import sys
   import MySQLdb
Як server_version.py, скрыпт імпарту MySQLdb, але таксама імпартуе модуль сістэмы для выкарыстання пры апрацоўцы памылак. (Animal.py sys.exit выкарыстоўвае (), каб вярнуць 1, каб паказаць аварыйнае завяршэнне, калі ўзнікае памылка.)

Апрацоўка памылак

Пасля імпарту неабходных модуляў, animal.py усталёўвае злучэнне з серверам, выкарыстоўваючы Connect () выкліку. Для забеспячэння магчымасці абрыву сувязі (напрыклад, так што вы можаце паказаць чыннік адмовы), неабходна злавіць выключэнні. Для апрацоўкі выключэнняў у Python, змясціць ваш код у паспрабаваць заява і ўключаць за выключэннем пункта, які ўтрымоўвае код апрацоўкі памылак. У выніку злучэння паслядоўнасць выглядае наступным чынам:

 
   try:
     conn = MySQLdb.connect (host = "localhost",
                             user = "testuser",
                             passwd = "testpass",
                             db = "test")
   except MySQLdb.Error, e:
     print "Error %d: %s" %(e.args[0], e.args[1])
     sys.exit (1)
За выключэннем пункта імёны класаў выключэнняў (MySQLdb.Error у дадзеным прыкладзе), каб атрымаць ад базы дадзеных інфармацыю пра памылкі, MySQLdb могуць забяспечыць, а таксама зменнай (E), у якім для захоўвання інфармацыі. Калі адбываецца выключэнне, MySQLdb робіць гэту інфармацыю даступнай у e.args, два элемента картэжа ўтрымоўвалыя лікавы код памылкі і радок з апісаннем памылкі. За выключэннем пункта паказана на прыкладзе друкуецца абое значэнні і выйсці.

Любая база дадзеных, злучаныя з ёй сцвярджэння могуць быць змешчаны ў аналагічных try/except структуры для ўлоўлівання і паведамленні пра памылкі, для сцісласці, пасля абмеркавання не паказвае код апрацоўкі выключэнняў. (Поўны тэкст animal.py паказаны ў прыкладанні.)

Метады за заявы

У наступнай частцы animal.py стварае курсор аб'ект і выкарыстоўвае яго для заявы, што пытанне стварэння і запаўненні жывёл табліцы:

 
   cursor = conn.cursor ()
   cursor.execute ("DROP TABLE IF EXISTS animal")
   cursor.execute ("""
       CREATE TABLE animal
       (
         name     CHAR(40),
         category CHAR(40)
       )
     """)
   cursor.execute ("""
       INSERT INTO animal (name, category)
       VALUES
         ('snake', 'reptile'),
         ('frog', 'amphibian'),
         ('tuna', 'fish'),
         ('racoon', 'mammal')
     """)
   print "Number of rows inserted: %d" %cursor.rowcount
Звернеце ўвагу, што гэты код не ўтрымоўвае памылак. (Памятаеце, што ён будзе змесцаваны ў заяве паспрабаваць; памылкі будуць выклікаць выключэнні, якія былі злоўлены і ўтрымоўваюцца ў адпаведных за выключэннем пункта, які дазваляе асноўны струмень код для чытання гладчэйша.) Заявы выканаеце наступныя дзеянні:
  • Drop жывёл табліцы, калі ён ужо існуе, каб пачаць з чыстага ліста.
  • Стварэнне жывёл табліцы.
  • Устаўце некаторыя дадзеныя ў табліцу і паведаміць колькасць радкоў дадаў.
Кожны аператар выдае спасылкі Execute () метад курсора аб'екта. Першыя два сцвярджэнні не даюць выніку, а трэці вырабляе падлік паказвае лік радкоў, устаўленых. Кол даступная ва ў радкоў атрыбутаў курсора. (Некаторыя базы дадзеных інтэрфейсы забяспечваюць гэты рахунак у якасці якое вяртаецца значэння з-выкананне выкліку заява, але гэта не ставіцца да DB-API).

Жывёл Стол накрыты ў гэты момант, таму мы можам пытанню SELECT запыты для атрымання інфармацыі ад яго. Як і ў папярэдніх заявах, SELECT заявы выдаюцца з дапамогай інструкцыі EXECUTE (). Аднак, у адрозненне ад заяў, такіх як падзенне ці INSERT, SELECT заявы стварэння выніковага набору, што вы павінны атрымаць. Гэта значыць, выканаць () толькі пытанні, заявы, ён не вяртае набор вынікаў. Вы можаце выкарыстоўваць fetchone () для атрымання радка па адным за раз, ці fetchall (), каб атрымаць іх усё адразу. Animal.py выкарыстоўвае як падыходаў. Вось як мага выкарыстоўваць fetchone () для радкоў у-чакай пошуку:

 
   cursor.execute ("SELECT name, category FROM animal")
   while (1):
     row = cursor.fetchone ()
     if row == None:
       break
     print "%s, %s" %(row[0], row[1])
   print "Number of rows returned: %d" %cursor.rowcount
fetchone () вяртае наступны радок з выніку запыту і картэжа, ці значэнне Не, калі шэрагаў больш няма даступныя. завесу праверкі для гэтага і выходзіць, калі выніковы набор быў вычарпаны. Для кожнага радка, якая вяртаецца, набор утрымоўвае два значэнні (гэта колькі слупкоў ЗЕЬЕСТ прасіў), што animal.py адбіткаў. Аператар друку паказана вышэй доступ асобных набору элементаў. Аднак, паколькі яны выкарыстоўваюцца ў парадку ўваходжання ў наборы, друку заява магла б гэтак жа, як і было напісана так:
 
   print "%s, %s" %row
Пасля адлюстравання заява выніку сцэнар таксама друкуе лік радкоў, вернутых (даступна ў якасці значэння атрыбуту радкоў).

fetchall () вяртае ўвесь выніковы набор усіх адразу, як картэж картэжаў, ці як пусты картэж, калі выніковы набор пусты. Каб атрымаць доступ да асобных набораў радкоў, ітэрацыю набор радкоў, што fetchall () вяртае:

 
   cursor.execute ("SELECT name, category FROM animal")
   rows = cursor.fetchall ()
   for row in rows:
     print "%s, %s" %(row[0], row[1])
   print "Number of rows returned: %d" %cursor.rowcount
Гэты код лічыльніка радкоў шляхам доступу радкоў, як і для fetchone () цыкл. Яшчэ адзін спосаб вызначыць колькасць радкоў пры выкарыстанні fetchall (), беручы даўжыню значэння, што ён вяртае:
 
   print "%d rows were returned" %len (rows)
Выбаркі завесы паказалі дагэтуль атрыманні радкоў як картэжы. Гэта таксама можна выняць радкі як слоўнікі, якая дазваляе атрымаць доступ да значэнняў слупка па імі. Наступны код паказвае, як гэта зрабіць. Адзначым, што слоўнік доступу патрабуецца розны выгляд курсора, так напрыклад зачыняе курсор і атрымлівае новы, які выкарыстоўвае іншы клас курсора:
 
   cursor.close ()
   cursor = conn.cursor (MySQLdb.cursors.DictCursor)
   cursor.execute ("SELECT name, category FROM animal")
   result_set = cursor.fetchall ()
   for row in result_set:
     print "%s, %s" %(row["name"], row["category"])
   print "Number of rows returned: %d" %cursor.rowcount
NULL значэнні ў наборы вынікаў вяртаюцца як Не, каб ваша праграма.

MySQLdb падтрымлівае запаўняльніка магчымасць, якая дазваляе злучаць дадзеныя значэнні для адмысловых маркераў у заяве радок. Гэта забяспечвае альтэрнатыву ўкладання значэння непасрэдна ў заяве. Запаўняльнік механізм ручкі дадаўшы двукоссі вакол значэнняў дадзеных, і яму атрымоўваецца пазбягаць любых адмысловых знакаў, якія адбываюцца ў межах значэнняў. Наступныя прыклады дэманструюць UPDATE заява, што змены змею чарапахі, спачатку з выкарыстаннем літарнай значэнні і затым з дапамогай запаўняльнікаў. Літаральнае значэнне заява выглядае наступным чынам:

 
   cursor.execute ("""
         UPDATE animal SET name = 'turtle'
         WHERE name = 'snake'
       """)
   print "Number of rows updated: %d" %cursor.rowcount
Акрамя таго, Вы можаце аформіць заяву ж пры дапамогі%з запаўняльнікам маркераў і абавязковым адпаведныя ім значэння:
 
   cursor.execute ("""
         UPDATE animal SET name = %s
         WHERE name = %s
       """, ("snake", "turtle"))
   print "Number of rows updated: %d" %cursor.rowcount
Звернеце ўвагу на наступныя звесткі пра форму папярэдніх Execute () па тэлефонах:
  • %S запаўняльніка маркер павінна адбывацца адзін раз для кожнага значэння, які павінен быць устаўлены ў заяве радка.
  • Без двукоссяў павінны быць змесцаваны па усяму%S маркераў; MySQLdb паставак катыроўкі для вас па меры неабходнасці.
  • Пасля радка аргументу заява Execute (), забяспечваюць картэж, які змяшчае значэнні на абавязковасць для запаўняльнікаў, у парадку, яны павінны з'явіцца ў радку. Калі ў вас ёсць толькі адно значэнне х, паказаць яго як (X,) для пазначэння аднаго элемента картэжа.
  • Прывязка Ні значэнне Python для запаўняльнік для ўстаўкі NULL значэнне SQL у заяве.
Пасля выдачы заявы, animal.py зачыняе курсор, фіксуе змены, і адключаецца ад сервера:
 
   cursor.close ()
   conn.commit ()
   conn.close ()
Падлучэнне аб'екта Commit () метад здзяйсняе любое выбітных змены ў бягучай транзакцыі, каб зрабіць іх сталымі ў базы дадзеных. У DB-API, злучэнні пачаць з рэжым аўтаматычнай фіксацыі адключаны, таму вы павінны выклікаць Commit () перад адключэннем ці змены могуць быць страчаны.

Калі жывёла табліца табліцы MyISAM, Commit () не мае ніякага эфекту: MyISAM з'яўляецца нетранзакционных захоўванні рухавіка, таму змены ў MyISAM табліцы ўступаюць у сілу неадкладна, незалежна ад рэжыме аўтаматычнай фіксацыі. Аднак, калі жывёла выкарыстоўвае транзакцыйны механізм захоўвання дадзеных, такіх як InnoDB, адмова ад выкліку Commit () прыводзіць да няяўнай адкат транзакцыі, калі вы адключыце. Напрыклад, калі вы дадасце ENGINE = InnoDB у канцы CREATE TABLE заява і выдаліць здзяйсненні () выкліку ў канцы сцэнара, вы выявіце, што жывёла з'яўляецца пустым пасля скрыпту.

Для сцэнараў, якія толькі атрымліваць дадзеныя, не змены павінны быць здзейснены і Commit () не з'яўляецца неабходным.

Партатыўнасць Notes

Калі вы жадаеце, каб порт MySQLdb аснове DB-API сцэнара для выкарыстання з розных баз дадзеных, крыніцы не-пераноснасці адбыцца ў любым месцы, што імя драйвера могуць быць скарыстаны:

  • Аператар import, што імпарт модуля драйвера. Гэта павінна быць зменена на імпарт розных драйвераў.
  • Connect () выкліку, які падлучаецца да сервера базы дадзеных. Connect () метад даступны праз імя драйвера, модулі, так што імя драйвера павінна быць зменена. Акрамя таго, звязацца () аргумент сінтаксіс можа вар'іравацца паміж кіроўцамі.
  • Апрацоўка выключэнняў. Выключэнне клас з імем, акрамя як становішча высылаецца праз імя драйвера.
Іншы тып, не-пераноснасці, якія не злучаны імя драйвера дакранаецца выкарыстанні запаўняльнікаў. DB-API спецыфікацыя дазваляе на працягу некалькіх сінтаксісу ўстаўкі, а некаторыя кіроўцы выкарыстоўваюць сінтаксіс, які адрозніваецца ад таго, падтрымліваецца MySQLdb.

Рэсурсы

Сцэнараў, якія выкарыстоўваюцца для прыкладаў у гэтым дакуменце можа быць загружаны па наступным адрасе:

 
   http://www.kitebird.com/articles/
 
Вы можаце знайсці наступныя дадатковыя рэсурсы карысныя для выкарыстання Python DB-API і драйвераў MySQLdb:
  • Эндзі Смяцяр, аўтар модуля MySQLdb, ёсць сайт па адрасе:
     
       http://dustman.net/andy/python/
     
    
    Гэты сайт з'яўляецца лепшым месца для чытання дакументацыі MySQLdb і часта задаваныя пытанні анлайн. Ён таксама ўтрымоўвае спасылкі на Debian і Windows бінарныя дыстрыбутывы. Каб атрымаць зыходны код ці Linux RPM, наведаеце MySQLdb SourceForge рэпазітары па адрасе:
     
       http://sourceforge.net/projects/mysql-python
     
    
  • MySQL Павараная кніга складаецца з Python DB-API сярод базе інтэрфейсаў праграмавання, што яна складаецца з:
     
       http://www.kitebird.com/mysql-cookbook
     http://www.oreilly.com/catalog/mysqlckbk/
     
    
  • На вэб-сайце Python мае ўсталёўнікаў для працэсара мове Python, вы павінны быць запушчаны на сістэме, якая не ён ужо ўсталяваны:
     
       http://www.python.org/
     
    
  • Базы дадзеных SIG (адмысловая група па інтарэсах) вобласць на вэб-сайце Python утрымоўвае дадатковую інфармацыю API-DB:
     
       http://www.python.org/sigs/db-sig/
     
    
  • Жывёл табліцы, выкарыстоўванай animal.py сцэнар таксама выкарыстоўваецца ў БД дакумент PEAR на сайце Kitebird:
     
       http://www.kitebird.com/articles/
     
    
    Вы маглі б знайсці гэта павучальна параўнаць гэты дакумент з гэтым, каб убачыць, як DB-API і PEAR DB з'яўляюцца аднолькавымі ці рознымі ў іх падыходах да баз дадзеных.

Прыкладанне

Поўны зыходны код для animal.py сцэнара паказана тут:

   #!/usr/bin/python
   # animal.py - create animal table and
   # retrieve information from it
 
   import sys
   import MySQLdb
 
   # connect to the MySQL server
 
   try:
     conn = MySQLdb.connect (host = "localhost",
                             user = "testuser",
                             passwd = "testpass",
                             db = "test")
   except MySQLdb.Error, e:
     print "Error %d: %s" %(e.args[0], e.args[1])
     sys.exit (1)
 
   # create the animal table and populate it
 
   try:
     cursor = conn.cursor ()
     cursor.execute ("DROP TABLE IF EXISTS animal")
     cursor.execute ("""
         CREATE TABLE animal
         (
           name     CHAR(40),
           category CHAR(40)
         )
       """)
     cursor.execute ("""
         INSERT INTO animal (name, category)
         VALUES
           ('snake', 'reptile'),
           ('frog', 'amphibian'),
           ('tuna', 'fish'),
           ('racoon', 'mammal')
       """)
     print "Number of rows inserted: %d" %cursor.rowcount
 
   # perform a fetch loop using fetchone()
 
     cursor.execute ("SELECT name, category FROM animal")
     while (1):
       row = cursor.fetchone ()
       if row == None:
         break
       print "%s, %s" %(row[0], row[1])
     print "Number of rows returned: %d" %cursor.rowcount
 
   # perform a fetch loop using fetchall()
 
     cursor.execute ("SELECT name, category FROM animal")
     rows = cursor.fetchall ()
     for row in rows:
       print "%s, %s" %(row[0], row[1])
     print "Number of rows returned: %d" %cursor.rowcount
 
   # issue a statement that changes the name by including data values
   # literally in the statement string, then change the name back
   # by using placeholders
 
     cursor.execute ("""
           UPDATE animal SET name = 'turtle'
           WHERE name = 'snake'
         """)
     print "Number of rows updated: %d" %cursor.rowcount
 
     cursor.execute ("""
           UPDATE animal SET name = %s
           WHERE name = %s
         """, ("snake", "turtle"))
     print "Number of rows updated: %d" %cursor.rowcount
 
   # create a dictionary cursor so that column values
   # can be accessed by name rather than by position
 
     cursor.close ()
     cursor = conn.cursor (MySQLdb.cursors.DictCursor)
     cursor.execute ("SELECT name, category FROM animal")
     result_set = cursor.fetchall ()
     for row in result_set:
       print "%s, %s" %(row["name"], row["category"])
     print "Number of rows returned: %d" %cursor.rowcount
 
     cursor.close ()
 
   except MySQLdb.Error, e:
     print "Error %d: %s" %(e.args[0], e.args[1])
     sys.exit (1)
 
   conn.commit ()
   conn.close ()

Прызнанне

Першапачатковы варыянт гэтага дакумента быў напісаны для NuSphere карпарацыі. Бягучая версія абноўленай перагляду арыгінала.

Гісторыя змен

  • 1,00 - Арыгінальная версія.
  • 1,01, 2003-01-24 - малаважныя змены.
  • 1,02, 2006-09-17 - Прынясіце да даты MySQLdb 1.2.1. Дадаць інфармацыю пра рэжым аўтаматычнай фіксацыі і Commit () метад.