2009-09-10 14 views
7

Jaki jest najlepszy sposób na wykorzystanie wbudowanej bazy danych, powiedz SQLite w Pythonie:python programowanie baz danych/sql - gdzie zacząć

  1. powinien być mały ślad. Potrzebuję tylko kilku tysięcy rekordów na stół. I tylko garść tabel na bazę danych.
  2. Jeśli jest to dostarczona przez domyślną instalację Pythona, to świetnie. Musi być open-source, dostępny w systemach Windows i Linus.
  3. Lepiej, jeśli SQL nie jest zapisany bezpośrednio, ale ORM nie jest w pełni potrzebny. Coś, co ochroni mnie przed rzeczywistą bazą danych, ale nie tak wielką z biblioteki. Coś podobnego do ADO będzie świetne.
  4. Zwykle będzie używany przez kod, ale jeśli istnieje interfejs użytkownika GUI, to jest wspaniałe
  5. Potrzebujesz kilku stron, aby zacząć. Nie chcę przeglądać stron czytających tabelę i jak działa instrukcja Select. Wiem o tym wszystkim.
  6. Wsparcie dla Pythona 3 jest preferowane, ale 2.x też jest w porządku.

Użycie nie jest aplikacją internetową. Jest to mała baza danych mieszcząca maksymalnie 5 tabel. Dane w każdej tabeli to tylko kilka kolumn ciągu. Pomyśl o coś większego niż marynowany słownik

Aktualizacja: Wielkie dzięki za świetne sugestie.
Przypadek użycia, o którym mówię, jest dość prosty. Zrobiłbyś to prawdopodobnie za dzień lub dwa.
Jest to 100-wierszowy skrypt w języku Python, który gromadzi dane o stosunkowo dużej liczbie plików (powiedzmy 10k) i tworzy pliki metadanych na ich temat, a następnie jeden duży plik metadanych o całym drzewie plików. Muszę tylko uniknąć ponownego przetwarzania już przetworzonych plików i utworzyć metadane zaktualizowanych plików oraz zaktualizować główny plik metadanych. W pewnym sensie buforuj przetwarzane dane i aktualizuj je tylko w aktualizacjach plików. Jeśli pamięć podręczna jest uszkodzona/niedostępna, po prostu przetwórz całe drzewo. Może to potrwać 20 minut, ale jest w porządku.

Należy pamiętać, że przetwarzanie odbywa się w pamięci.

Chciałbym uniknąć wszelkich zewnętrznych zależności, aby skrypt mógł być łatwo umieszczony w dowolnym systemie z zainstalowaną tylko instalacją Pythona. Będąc systemem Windows, czasami trudno jest zainstalować wszystkie składniki. Tak, Moim zdaniem, nawet baza danych może być przesadą.

Prawdopodobnie nie uruchomisz Office Word/Writer, aby napisać mały wpis, ale nie chcę używać czegoś takiego jak Django do tego przypadku.

Od czego zacząć?

+0

Czy to aplikacja internetowa lub desktopowa? –

+0

nie aplikacja internetowa. Zaledwie aplikacja komputerowa. W tym konkretnym przypadku muszę przechowywać pewne metadane dotyczące wielu plików i niektórych ich zawartości. CRUD i UI tak naprawdę nie są potrzebne, z wyjątkiem debugowania. – Ayman

+0

Nie rozumiem tego "lekkiego" wymogu i tego, w jaki sposób ORM się nie mieści. Przez "waga ciężka" masz na myśli: 1. zbyt skomplikowane, aby wymyślić 2. wymagania dotyczące pamięci/dysku? 3. za dużo funkcji? –

Odpowiedz

1

Jest to suma odpowiedzi, w przypadkowej kolejności:

Wszyscy polecając warstwy ORM. To ma sens, jeśli naprawdę potrzebujesz bazy danych. Dobrze, że było coś w rodzaju wniosek w tytule :-)

  1. SQLAlchemy
  2. Autumn
  3. Django ORM
  4. Korzystanie SQLite oficjalnego wsparcia Pysqlite
  5. Storm
  6. Elixir
  7. Wystarczy użyć Pythona własne marynaty

Ale zaczynam myśleć, że jeśli baza danych w pamięci jest wystarczająca, w tym będzie używana tylko w skryptach, a nie w aplikacji internetowej, a nawet na pulpicie GUI, wtedy opcja 7 jest również całkowicie poprawna, pod warunkiem obsługa transakcji nie jest potrzebna, a spójność "bazy danych" nie stanowi problemu.

+0

jeśli zdecydujesz się na użycie SQLite, SQLiteSpy (http://www.yunqa.de/delphi/doku.php/products/sqlitespy/index) będzie interfejsem GUI. Osobiście użyłbym SQLAlchemy z Elixirem, ale muszę przyznać, że nigdy nie używałem jesieni (teraz patrzę) – van

+0

@Ayman: SQLite może przechowywać w pamięci i może być szybsze w przypadku niektórych operacji (np. Agregacji) niż operacje Pythona na obiektów, ponieważ przechowuje wartości, a nie obiekty. Powinien profil i zobaczyć ... – voyager

2

początek z Django

http://www.djangoproject.com/

ORM jest do zrobienia tutaj. Nie pożałujesz tego. Samouczek o tej nazwie jest bardzo łagodny.

Dlaczego Django/ORM? Django uruchomi Cię w ciągu około pół godziny, będzie zarządzał twoimi połączeniami z bazami danych, interfejsami zarządzania danymi itp. Django pracuje SQLLite: nie będziesz musiał zarządzać instancją MySQL/PostGre.

EDIT1: Do tego celu nie trzeba używać części aplikacji Django. Za pomocą klas db.Model można bezpośrednio manipulować danymi. Niezależnie od tego, jaka wersja samodzielnej aplikacji/skryptu powstanie, możesz po prostu użyć warstwy modelu danych Django. A gdy zdecydujesz, że chcesz korzystać z interfejsu sieciowego lub przynajmniej chcesz edytować swoje dane za pośrednictwem konsoli administratora - możesz wysłać tutaj i podziękować mi (lub wszystkim, którzy powiedzieli, że korzystasz z ORM) :)

+0

Django, mimo że jest świetny, jest zbyt "ciężki" dla moich potrzeb. Potrzebna jest znacznie mniejsza powierzchnia. – Ayman

+0

co sprawia, że ​​jest "ciężki"? o jakim "śladzie" mówisz? –

3

Zacząłem tutaj:

http://www.devshed.com/c/a/Python/Using-SQLite-in-Python

To 5 (krótka) stron z zaledwie zasadniczych masz mnie zamiar od razu.

+0

Biorąc pod uwagę datę tego wpisu ... http://docs.python.org/library/sqlite3.html pysqlite jest dostępny jako sqlite3 od Pythona 2.5. –

+0

Myślę, że ORM taki jak jesień jest znacznie prostszym sposobem pracy z bazą danych. SQL może być trudny; Naprawdę miło jest, gdy ORM ukrywa niechlujne szczegóły, skupiając się tylko na swoich danych i tym, co chcesz z tym zrobić. – steveha

+0

@steveha: To zależy od tego, co robisz i od zrozumienia SQL. Jeśli potrzebujesz po prostu przechowywać obiekty w bazie danych, ORM jest akceptowalny, ale czasami Twoje potrzeby mogą nie pasować do możliwości ORM. – voyager

0

Django jest idealny do tego, ale plakat nie jest jasny, jeśli musi on rzeczywiście skompilować plik EXE lub aplikację internetową. Django jest tylko dla aplikacji internetowych.

Nie jestem pewien, skąd naprawdę "ciężki". Django jest znacznie mniejsze pod względem linii kodu niż jakikolwiek inny główny framework aplikacji internetowej.

+0

@Stephen odpowiedź jest bardzo zbliżona do tego, co chcę. Tworzę aplikację internetową, więc nie potrzebuję Django. – Ayman

+0

@Ayman: możesz użyć autonomicznego ORM Django. Może jednak nie spełniać Twoich wymagań dotyczących małych powierzchni. – voyager

6

Gorąco polecam korzystanie z dobrej ORM. Kiedy możesz pracować z obiektami Pythona w celu zarządzania wierszami w bazie danych, życie jest o wiele łatwiejsze.

Jestem fanem ORM w Django. Ale to już było zalecane i powiedziałeś, że jest za ciężki.

To pozostawia mi dokładnie jedną ORM, aby polecić: Autumn. Bardzo lekki, świetnie współpracuje z SQLite. Jeśli wbudowana aplikacja będzie wielowątkowa, to absolutnie chcesz Jesień; ma rozszerzenia obsługujące wielowątkową SQLite. (Pełne ujawnienie: Napisałem te rozszerzenia i dodałem je, napisałem je podczas pracy w RealNetworks, a moi szefowie pozwolili mi je przekazać, więc publicznie dziękuję za RealNetworks.)

Jesień jest napisana w czystym Pythonie. W przypadku SQLite używa on oficjalnego modułu SQLite w Pythonie do wykonywania rzeczywistych rzeczy SQL. Ślad pamięci samej jesieni jest malutki.

Nie polecam APSW. Moim skromnym zdaniem, tak naprawdę nie robi to zbyt wiele, aby ci pomóc; to po prostu zapewnia sposób wykonywania instrukcji SQL i pozostawia ci opanowanie sposobu działania SQL. Ponadto obsługuje wszystkie funkcje SQLite, nawet te rzadko używane, dzięki czemu ma większy rozmiar pamięci niż jesień, a jednocześnie nie jest tak łatwy w użyciu.

3

To, czego szukasz, to SQLAlchemy, która szybko staje się de facto standardową warstwą dostępu do danych Python. Aby jeszcze bardziej ułatwić sobie pierwsze doświadczenia z SQLAlchemy, sprawdź Elixir, który jest cienkim opakowaniem w stylu ActiveRecord wokół SQLAlchemy.

Aktualizacja: Przejrzyj pytanie i zobaczysz, że nie potrzebujesz pełnego ORM. Wciąż chciałbym zasugerować przejście na trasę SQLAlchemy, tylko dlatego, że daje ci to absurdalnie prosty sposób pracy z bazami danych w Pythonie, którą możesz ponownie wykorzystać dla dowolnej bazy danych. Czas spędzony na pracy bezpośrednio z SQLite jest marnowany, gdy trzeba połączyć się z Oracle lub czymś podobnym.

+0

Pracowałem z SQLAlchemy i jest całkiem niezły. Jednak ma znacznie większy zasięg pamięci niż jesień i ma funkcje, których prawdopodobnie nie będzie potrzebować osadzona aplikacja. Nasz projekt w RealNetworks rozpoczął się od użycia SQLAlchemy, flirtował z APSW, a następnie przełączył na jesień. (Zgadzam się, że nie powinien próbować pracować bezpośrednio z SQLite, ale myślę, że jest mało prawdopodobne, że kiedykolwiek spróbuje osadzić Oracle w osadzonej aplikacji.) – steveha

+0

@steveha, nie sugeruję, że będzie trzeba osadzić Oracle w podobnym małym programie. Sugeruję, że w pewnym momencie będzie musiał połączyć się z innym typem bazy danych, a uczenie się jednego potężnego i wszechstronnego sposobu na zrobienie tego ułatwi mu życie. – Kevin

+0

@Kevin: Wystarczająco. I wyraźnie powiedziałeś "połączyć się z Oracle" zamiast "osadzić Oracle" ... przepraszam za to. – steveha

0

Kolejna opcja do dodania do innych dobrych propozycji: Elixir. Zapewnia uproszczoną warstwę deklaratywną na szczycie SQLAlchemy, więc powinno być łatwiej w niej zagłębić się, ale pozwala także na wywołanie pełnej mocy SQLAlchemy, jeśli i kiedy jest to potrzebne.

0

Jest łatwy w obsłudze moduł Pythona, który spełnia wszystkie określone cele:

http://yserial.sourceforge.net/

serializacji + wytrwałości: w ciągu kilku linii kodu, kompresji i opisywanie Python obiektów w SQLite; następnie odzyskać je chronologicznie według słów kluczowych bez żadnego SQL. Najbardziej przydatny "standardowy" moduł dla bazy danych do przechowywania danych bez schematu.

Co zaskakujące, w większości praktycznych zastosowań nie ma dużej różnicy między rozwiązaniami pamięciowymi i trwałymi.

Co do "ochrony przed rzeczywistą bazą danych", z y_serial, nie można nawet powiedzieć, że SQLite jest za tym wszystkim. Jeśli tworzysz swoje rekordy jako słowniki w języku Python, możesz skoncentrować się na pisaniu kodu (nie procedur przechowywanych).

0

Jeśli nie chcesz używać ORM, możesz spróbować uzyskać python-sql, aby utworzyć zapytania SQL.