Pereiti prie turinio

Python/Duomenų saugojimo diske būdai

Iš Wikibooks.

Paprastam duomenų saugojimui diske galima naudoti 3 variantus

Tekstiniai failai

[keisti]

Galima naudoti paprasčiausius tekstinius failus (http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files ). Kartais tam reikia pritaikyt Unikodo koduotę (pvz UTF-8) (keli paaiškinimai http://stackoverflow.com/questions/491921/unicode-utf8-reading-and-writing-to-files-in-python )

Tačiau paprastuose txt failuose reikia patiems rūpintis duomenų formatais, t.y., galvoti, kaip atsekti nuskaitomus duomenis, jei jie yra sudėtingesni. Python turi patogesnių įrankių.

Pickle

[keisti]

Tai standartinis Pythono kintamųjų/reikšmių saugojimas/užkrovimas iš failo. pvz: http://www.java2s.com/Code/Python/Database/UsePickletosaveandread.htm http://docs.python.org/library/pickle.html#example

pickle privalumas -- tiesiog naudoji Python struktūras; gali jas "apdoroto" standartine python sintakse (ciklai, filtravimas ir pan) ypatingas privalumas -- jei struktūros hierarchinės (pvz, zodynas zodyne ir dar kur nors masyvas žodyne ar pan šypsena)

vietoj SQL užklausų galima labai sėkmingai naudoti (sąrašų užklausas): http://docs.python.org/tutorial/datastructures.html#list-comprehensions pvz, daugybos lentelė, kuri atrenka tik didesnius už 5 skaičius [x*y for x in range(10) for y in range(10) if x*y > 5] arba galima labiau pabrėžti struktūrą [ [x*y for x in range(10) if x*y > 5 ] for y in range(10) ]

dar galima patogiai išnaudoti alternatyvios reikšmės saugojimą k = a if salyga else b matrica = [ [x*y if x*y > 5 else '---' for x in range(10)] for y in range(10)]

ps.: hierarchines struktūras patogu peržiūrėti su pprint from pprint import pprint pprint(matrica)

ps.: panašiai, kaip Pickle, galima naudoti ir Zope kūrėjų sukurtą universalią [ http://en.wikipedia.org/wiki/Zope_Object_Database | ZoDB ] priemonę. Tik jos naudojimo paruošimas yra ne visai paprastas. (http://docs.zope.org/zodb/ )

SQLite

[keisti]

sqlite: universalesnis formatas -- vėliau duomenis galima tvarkyti ir kitomis priemonėmis, pvz https://addons.mozilla.org/en-US/firefox/addon/5817

paprasčiausia DB (visos lentelės saugomos viename faile -- patogu perkelti į kitą kompiuterį ir pan) http://docs.python.org/library/sqlite3.html (pažr pvz iki skyrelio "12.13.1. ...") koncentruotesnis pavyzdys: http://snippets.dzone.com/posts/show/653 (tik vietoj "sqlite" dabar reiktų naudoti "sqlite3", ir atkomentuoti lentelės sukūrimą pirmą kart leidžiant programą (paskui vėl užkomentuoti) )


CSV (comma separated values)

[keisti]

CSV irgi universalus (ir turbūt seniausias) -- galima peržiūrėti su OOo Calc ar Excel ar pan -- bet patogiausia, jei yra tik viena lentelė, ar bent jau nedaug ryšių tarp lentelių. http://licejus.lt/~gintas/python/04-koduotes.html http://docs.python.org/library/csv.html

DAL (Data Abstraction Layer)

[keisti]

Pythone yra keli įrankiai, kurie leidžia duomenis saugoti reliacinėse DB, patiems nerašant SQL komandų. Juos naudojant užtenka vieną kartą apsirašyti duomenų modelį (klases bei kintamuosius), pagal kurį programa sukuria DB lenteles, ir leidžia jas manipuliuoti. Vieni populiariausių: - http://www.sqlobject.org/ - http://www.sqlalchemy.org/