programowanie baz danych python / SQL-od czego zacząć

Jaki jest najlepszy sposób użycia wbudowanej bazy danych, powiedzmy sqlite w Pythonie:

  1. powinny być małe. Potrzebuję tylko kilka tysięcy rekordów na stół. I tylko garść tabel na bazę danych.
  2. jeśli jest dostarczany przez domyślną instalację Pythona, to świetnie. Musi być open-source, dostępny na Windows i Linus.
  3. lepiej, jeśli SQL nie jest napisany bezpośrednio, ale żaden ORM nie jest w pełni potrzebny. Coś, co ochroni mnie przed rzeczywistą bazą danych, ale nie to ogromna biblioteka. Coś podobnego do ADO będzie świetne.
  4. w większości będą używane przez KOD, ale jeśli istnieje front end GUI, to jest to świetne
  5. potrzeba tylko kilku stron,aby zacząć. Nie chcę przeglądać stron, czytając czym jest tabela i jak działa instrukcja Select. Wiem to wszystko.
  6. preferowane jest wsparcie dla Pythona 3, ale 2.x też jest w porządku.

użycie nie jest aplikacją internetową. Jest to mała baza danych do przechowywania co najwyżej 5 tabel. Dane w każdej tabeli znajduje się tylko kilka kolumn string. Pomyśl o czymś większym niż marynowany słownik

Aktualizacja : Wielkie dzięki za wspaniałe sugestie.
Przypadek użycia, o którym mówię, jest dość prosty. Pewnie zrobiłbyś to za dzień lub dwa.
Jest to 100-liniowy skrypt Pythona, który zbiera dane o stosunkowo dużej liczbie plików (powiedzmy 10k) i tworzy pliki metadanych o nich, a następnie jeden duży plik metadanych o całym drzewie plików. Po prostu muszę unikaj ponownego przetwarzania już przetworzonych plików i twórz metadane dla zaktualizowanych plików i aktualizuj główny plik metadanych. W pewnym sensie buforuj przetworzone dane i aktualizuj je tylko przy aktualizacjach plików. Jeśli pamięć podręczna jest uszkodzona / niedostępna, po prostu przetworz całe drzewo. To może zająć 20 minut, ale nie szkodzi.

Zauważ, że całe przetwarzanie odbywa się w pamięci.

Chciałbym unikać jakichkolwiek zewnętrznych zależności, aby skrypt można było łatwo umieścić na dowolnym systemie z tylko instalacja Pythona na nim. Będąc Windows, czasami trudno jest zainstalować wszystkie komponenty. Więc, moim zdaniem, nawet baza danych może być przesadą.

Prawdopodobnie nie odpaliłbyś Office Word / Writer, Aby napisać małą notatkę typu post it, podobnie niechętnie używam czegoś takiego jak Django w tym przypadku użycia.

Od czego zacząć?

Author: Ayman, 2009-09-10

9 answers

Gorąco polecam użycie dobrego ORM. Kiedy można pracować z obiektami Pythona w celu zarządzania wierszami bazy danych, życie jest o wiele łatwiejsze.

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

To pozostawia mi dokładnie jeden ORM do polecania: Jesień . Bardzo lekki, świetnie współpracuje z SQLite. Jeśli Twoja aplikacja osadzona będzie wielowątkowa, to koniecznie potrzebujesz Autumn; ma rozszerzenia do obsługi wielowątkowy SQLite. (Pełne ujawnienie: napisałem te rozszerzenia i przyczyniłem się do nich. Napisałem je pracując dla RealNetworks, a moi szefowie pozwolili mi je przekazać, więc publiczne podziękowanie dla RealNetworks.)

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

Nie polecam APSW. Moim skromnym zdaniem nie bardzo pomaga; to po prostu zapewnia sposób wykonywania poleceń SQL i pozostawia Ci opanowanie sposobu działania SQL. Ponadto obsługuje każdą pojedynczą funkcję SQLite, nawet te, których rzadko używasz, a w rezultacie ma większy ślad pamięci niż Autumn, a jednocześnie nie jest tak łatwy w użyciu.

 6
Author: steveha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-10 20:34:07

Zacząłem tutaj:

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

Jest to 5 (krótkie) stron z tylko podstawowe got mnie dzieje od razu.

 3
Author: hatmatrix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-10 19:41:45

To, czego szukasz, to SQLAlchemy , który szybko staje się de facto standardową warstwą dostępu do danych Pythona. Aby Twoje pierwsze doświadczenia z SQLAlchemy były jeszcze łatwiejsze, sprawdź Elixir , który jest cienkim opakowaniem W Stylu ActiveRecord wokół SQLAlchemy.

Update: przeczytaj ponownie pytanie i zobacz fragment o nie konieczności pełnego ORM. Nadal sugerowałbym pójście drogą SQLAlchemy, tylko dlatego, że daje śmiesznie łatwy sposób na pracę z bazami danych w Pythona, którego możesz użyć dla każdego rodzaju bazy danych. Czas spędzony na pracy bezpośrednio z SQLite jest marnowany, gdy trzeba połączyć się z Oracle lub coś takiego.

 3
Author: Kevin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-10 20:42:08

Zacznij od Django

Http://www.djangoproject.com/

ORM to droga tutaj. Nie pożałujesz. Tutorial tutaj http://docs.djangoproject.com/en/dev/intro/tutorial01 jest dość delikatny.

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

EDIT1: Nie musisz do tego użyć Web-app części Django. Możesz użyć db.Modeluj klasy, aby bezpośrednio manipulować danymi. Niezależnie od tego, jaką samodzielną aplikację / skrypt wymyślisz, możesz po prostu użyć warstwy Django data-model. A kiedy zdecydujesz się na front-end internetowy, lub przynajmniej chciałbyś edytować swoje dane za pośrednictwem konsoli administratora - możesz dodać tutaj i podziękować mi (lub wszystkim, którzy powiedzieli, użyj ORM):)

 2
Author: George Godik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-11 16:08:39

Jest to zbiór odpowiedzi, w żadnej konkretnej kolejności:

Wszyscy zalecają warstwę ORM. Co ma sens, jeśli naprawdę potrzebujesz bazy danych. Cóż, to było jakby wymagane w tytule : -)

  1. SQLAlchemy
  2. Jesień
  3. Django ORM
  4. Użyj oficjalnego wsparcia SQLite Pysqlite
  5. Storm
  6. Elixir
  7. Po prostu użyj własnego ogórka Pythona

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 lub nawet w graficznym interfejsie graficznym, to opcja 7 jest również doskonale ważna, pod warunkiem, że nie jest potrzebna obsługa transakcji i integralność "bazy danych" nie jest problemem.

 1
Author: Ayman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-11 06:41:53

Django jest do tego idealny, ale plakat nie jest jasny, czy musi zrobić skompilowany EXE czy aplikację internetową. Django jest tylko dla aplikacji internetowych.

Nie jestem pewien, skąd tak naprawdę jesteś "ciężki". Django jest rażąco mniejszy pod względem linii kodu niż jakikolwiek inny framework aplikacji webowych.

 0
Author: M. Ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-10 19:48:41

Kolejna opcja, aby dodać do innych dobrych sugestii: Elixir . Zapewnia uproszczoną warstwę deklaratywną na wierzchu SQLAlchemy, więc powinno być łatwiejsze do zanurzenia, ale pozwala również na wywołanie pełnej mocy SQLAlchemy, jeśli i kiedy jej potrzebujesz.

 0
Author: Ned Deily,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-11 01:28:44

Istnieje łatwy w użyciu moduł Pythona, który spełnia wszystkie podane cele:

Http://yserial.sourceforge.net/

Serializacja + persistance: w kilku wierszach kodu Kompresuj i Adnotuj Obiekty Pythona do SQLite; następnie pobieraj je chronologicznie według słów kluczowych bez użycia SQL. Najbardziej przydatny "standardowy" moduł dla bazy danych do przechowywania danych bez schematu.

Zaskakująco, nie ma dużej różnicy między rozwiązaniami w pamięci a rozwiązaniami trwałymi dla większości cele praktyczne.

Co do "chroń mnie przed rzeczywistą bazą danych", z y_serial, nie można nawet powiedzieć, że za tym wszystkim stoi SQLite. Jeśli tworzysz swoje rekordy jako Słowniki Pythona, możesz skoncentrować się na pisaniu kodu (Nie procedur składowanych).

 0
Author: code43,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-05 19:31:56

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

 0
Author: ced,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-03 23:06:37