Datenspeicherung

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Ich habe folgendes Problem:

Etwa 10.000 Datensätze (maximal) mit zwischen 10 und vielleicht einmal 30, 40 Spalten und dort sind nur Daten (Datum, Link, kurze Beschreibung, usw.) drin, die eher kurz sind, d. h. kleine Textfetzen.

Ich muss diese Datensätze ergänzen, speichern, abrufen und später werden möglicherweise mehrere Programme gleichzeitig auf diese Datenbasis zugreifen.

Bislang arbeite ich mit einer CVS-Datei, die ich ggf. via Tabellenkalkulation ergänze usw. Ich überlege jetzt aber möglicherweise eine Datenbank einzusetzen.

Ich habe an MySQL gedacht, im Kern muss es "relativ" schnell sein, soll einfach zu warten und - wichtig - einfach und schnell zu lernen sein. Wie würdet ihr das angehen. Ich habe gesehen, dass es 2x ein Modul für MySQL gibt, welches würdet ihr einsetzen und warum. BTW: Ein Hinweis direkt in der Übersicht wäre nicht schlecht.
BlackJack

@pixewakb: Datensätze mit einer unterschiedlichen Anzahl von Spalten klingt erst einmal etwas komisch.

Ich denke bei SQL-Datenbanken ist das lernen der API relativ einheitlich. Unabhängig welche Datenbank und welches Modul man nimmt, hat man SQL und das relationale Modell und die DB-API V2 zu lernen. Unterschiede gibt's bei DBMS-spezifischen Datentypen und Erweiterungen und datenbankseitiger Programmierung — wenn man so etwas nutzen möchte. Und beim Aufsetzen und Konfigurieren des Datenbankservers kann es natürlich Unterschiede geben die sich auf die Lernkurve auswirken können, wenn man das Gesamtsystem betrachtet. Ob SQL nun einfach und schnell zu lernen ist, hängt wohl nicht unwesentlich davon ab wie komplex die Operationen werden die man damit umsetzen möchte. Und da man ja eher nicht mit SQL direkt auf der Datenbank agiert, kommt sicher noch irgendeine Form von GUI dazu, also entweder nativ oder Webanwendung. Wofür man vielleicht auch noch Neues lernen muss.

Was die MySQL-Anbindungen angeht, da gibt es deutlich mehr als zwei. Der „Klassiker” MySQLdb, PyMySQL, MySQL Connector/Python von MySQL selbst, CyMySQL, und OurSQL — um mal ein paar zu nennen. :-)

Ich nutze momentan für MySQL noch MySQLdb weil es halt der Klassiker ist und ich den schon immer benutzt habe und weil ich produktiv Python 2 nutze. Ist einfach über die Paketverwaltung bei Debian/Ubuntu zu installieren.

Und für den produktiven Einsatz verwende ich fast immer SQLAlchemy als Abstraktionsschicht statt SQL als Zeichenketten zu schreiben.
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Die variierende Spaltenzahl bedeutet, dass ich aktuell dort genau 8 Spalten habe und es wahrscheinlich ist, dass dort mit der Zeit weitere Spalten und Inhalte ergänzt werden müssen.

Im Kern brauche ich nur eine Tabelle auf die ich schreibend und lesend mit mehreren Programmen gleichzeitig zugreifen kann, d. h. während Programm 1 Daten abruft, soll Programm 2 Daten ergänzen können und vielleicht einmal Programm 3 neue Datensätze ergänzen.

Meine Tabelle - im Moment CSV - ist nur dafür da, dass ich für einen Schlüssel A einen zugehörigen Wert abrufe, was eine theoretisch statische Sache ist (Änderungen in den konkreten Daten vielleicht mal alle 10 Jahre) und wenn ich stattdessen mal Wert B erhalte, dann will ich von dort wieder zu Schlüssel A kommen, ist so etwas wie ein Vokabel-Lernprogramm, weil unterschiedliche Tools unterschiedliche Namen erwarten.

Vor dem Hintergrund, will ich den Aufwand klein halten, weil ich - nie - mehr brauchen werde, daher meine Frage. Wie gesagt, im Moment komme ich noch gut mit CSV zurecht...

Hast du einen Tipp für ein Modul passend zu Python 3!?
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@pixewakb: um den Aufwand für eine Datenbank klein zu halten, reicht Dir höchstwahrscheinlich SQLite.
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

@pixewakb: SQLite hat auch den Vorteil das es in der Standardinstallation bereits vorhanden ist und man sich nicht um andere Module kümmern muß. Für deine Anwendung sollte es allemal reichen.
---------------------------------
have a lot of fun!
Benutzeravatar
pixewakb
User
Beiträge: 1411
Registriert: Sonntag 24. April 2011, 19:43

Danke, ich habe mir gerade

Sqlite Database Browser (sqlitebrowser.org)

angesehen, womit ich m. E. die Tabelle leicht anlegen und leicht modifizieren kann und habe damit eine gefühlte Kontrolle, wie bei MySQLAdmin. Die Abfragen bzw. Bearbeitungen werde ich mit Python erledigen, aber ich hätte immer gern auch eine (leichte) Sichtkontrolle auf das, was ich da unternehme.

Herzlichen Dank!!!
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

@pixewakb: allerdings solltest du beachten, dass man bei SQlite zwar durchaus gleichzeitig lesend auf die Datenbankdatei zugreifen kann, schreibend geht nur ein Programm zur gleichen Zeit. In wie weit dann im Schreibprozess auch noch gleichzeitig lesend zugegriffen werden kann, weiß ich im Moment nicht. Außerdem kann in der Regel auf die Datenkbankdatei in einem Netzlaufwerk nur lesend aber nicht schreibend zugegriffen werden. Zumindest bekam ich bei mir zu Hause immer einen Fehler, wenn die Datenbankdatei auf dem NAS lag und nicht lokal auf der Platte. Lesen ging, schreiben kam ein Fehler.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@bfm: natürlich können verschiedene Programme "gleichzeitig" auf eine SQLite-Datenbank lesend und schreibend zugreifen. Das "gleichzeitig" muß halt, wie bei jeder Datenbank koordiniert werden, was aber alles intern geregelt wird. Vielleicht ist das "gleichzeitig" bei SQLite nicht so performant wie bei anderen Datenbanken, aber das scheint ja hier nicht relevant zu sein. Da zum gleichzeitigen Schreiben die Locking-Mechanismen des Dateisystems benutzt werden, kann es auf bestimmten Netzwerklaufwerken zu Problemen kommen.
Antworten