SQLite Anwendung lokal, Ablage Daten Homepage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
genders
User
Beiträge: 31
Registriert: Samstag 23. Februar 2008, 12:26
Wohnort: Innsbruck / Tirol / Österreich

Da mehrere Foren betroffen, meine Anfrage hier: da ich mit dem Aufbau der erforderlichen Verbindungen übers Internet keine Erfahrungen habe, suche ich zum Einstieg ein möglichst einfaches SQLite-Beispiel wo die Anwendung lokal läuft und das File der Datenbank auf einer Homepage liegt. Hilfreich wäre auch schon die Klarstellung, wie die Verbindung aufzubauen ist, z.B. welches Socket (?) Protokoll für die Verbindung (lesen/selten schreiben) das richtige bzw. notwendig ist. Habe schon eine längere Suche hinter mir, bin aber mit den Fundstellen nicht wirklich klar gekommen. Meine Basis ist Python 2.6 und Windows.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

genders hat geschrieben:... suche ich zum Einstieg ein möglichst einfaches SQLite-Beispiel wo die Anwendung lokal läuft und das File der Datenbank auf einer Homepage liegt.
Du meinst Webspace? Oder präziser: Die Daten soll SQLite auf einem per remote Zugriff erreichbaren Speicherplatz ablegen, die Anwendung soll aber lokal laufen?
Hilfreich wäre auch schon die Klarstellung, wie die Verbindung aufzubauen ist, z.B. welches Socket (?) Protokoll für die Verbindung (lesen/selten schreiben) das richtige bzw. notwendig ist. Habe schon eine längere Suche hinter mir, bin aber mit den Fundstellen nicht wirklich klar gekommen. Meine Basis ist Python 2.6 und Windows.
Ich glaube Du machst es Dir unnötig schwer! Bei Deiner Vorstellung müßtest Du ja eine "Server"-Komponente entwickeln, die die Daten von Deiner Client-Applikation in die SQLite-Datei einspeist. Da SQLite ja eben keine Client-Server basierte DB darstellt, wage ich zu bezweifeln, dass man da was sinnvolles mit erreichen kann.

Was willst Du eigentlich im großen erreichen? Wieso soll es denn SQLite sein, wenn Du übers Netzwerk agieren willst? Was ist Dein Ziel?

Ich glaube wir kommen nach der Beantwortung dieser Fragen eher weiter.
genders
User
Beiträge: 31
Registriert: Samstag 23. Februar 2008, 12:26
Wohnort: Innsbruck / Tirol / Österreich

Danke für die rasche Antwort. Auf die Daten sollte von unterschiedlichen Orten aus zugegriffen werden können, mein normaler Internetanschluss stellt nur einen Webspace ohne weitere Möglichkeiten zur Verfügung. SQLite läßt laut Beschreibung Netzwerkbetrieb zu, ist aber nur bei größerem Verkehr, der bei dieser Anwendung sicher nicht gegeben wäre, nicht geeignet. Der Webspace sollte eigentlich wie eine (ferne) Platte im Netzwerk agieren. Im Handybereich gibt es laut Google Anwendungen mit SQLite, dort wird aber wahrscheinlich die gesamte Anwendung am Server liegen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

genders hat geschrieben:SQLite läßt laut Beschreibung Netzwerkbetrieb zu, ist aber nur bei größerem Verkehr, der bei dieser Anwendung sicher nicht gegeben wäre, nicht geeignet.
Das wäre mir neu. Kannst Du dazu mal nen Link posten?

Die Lösung ist doch eigentlich einfach: Lass einfach die Applikation auf dem Webserver laufen und schicke nur die Daten per http an diese. Dann brauchst Du keinen entfernten Zugriff auf die DB realisieren.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du kannst auf SQLite nicht über eine Netzwerkverbindung verwenden, es arbeitet auf dem Dateisystem. Wie Hyperion schon sagte, müsstest du dir dafür eine Komponenten schreiben. Wenn du aber lediglich einfachen Webspace hast, dann geht auch das nicht, da müsstest du schon aufrüsten. Ein direkter Zugriff von außen auf die DB ist aber eh nicht zu empfehlen.

SQLite & Handy: Du unterschätzt (moderne) Handys gewaltig. Aufwändige Anwendungen laufen darauf sehr wohl. Das iPhone verwendet zum Beispiel SQLite für die Anwendungen als Standard.
Das Leben ist wie ein Tennisball.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Vermutlich hast du gelesen, dass Sqlite mit Netzlaufwerken funktioniert, dass ist aber etwas anderes wie der Zugriff über http.
Hast du auf dem Webspace keine anderen Technologien (PHP, MySQL, FTP)?
genders
User
Beiträge: 31
Registriert: Samstag 23. Februar 2008, 12:26
Wohnort: Innsbruck / Tirol / Österreich

Hyperion: der Link ist u.a. http://www.sqlite.org/whentouse.html und der Webspace ist nur "dumm"

EyDu:
Handy unterschätze ich nicht, die Anwendungen die ich meine, greifen nur auf eine allgemeine Datenbasis zu, die nicht aktuell am Handy liegen kann, bestenfalls jeweils aktualisiert werden kann. Handys können das mit SQlite also lösen.
Bezüglich Netzwerverbindungen muß ich das mal im eigenen Netzwerk (ohne Internet) am Wochenende testen, ich bin kein gelernter EDV-Mensch. Bisher dachte ich, alle eingebunden (auch ferne) Laufwerke sind Teil des Dateisystems. Aber vielleicht drücke ich mich nicht fachgerecht aus und es sollte aus diesem Punkt keine Extradiskussion enstehen.
In einigen über Google gefundenen Literaturstellen wird SQLite über Socket Verbindungen angebunden (allerdings ist kein kompletter Beispielcode dabei), ist das in normalem Dateisystem notwendig?
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

genders hat geschrieben:In einigen über Google gefundenen Literaturstellen wird SQLite über Socket Verbindungen angebunden (allerdings ist kein kompletter Beispielcode dabei), ist das in normalem Dateisystem notwendig?
Da würde ich mal gerne Beispiele sehen.

Und zu deinem Link: Die Stelle mit Sqlite mit Webseite ist so gemeint, dass du Sqlite als Datenbank für eine Webanwendung nutzen kannst, und nicht, dass du die Datenbank über eine Webseite "verteilen" kannst.

Und ja, über Netzlaufwerke müsste das funktionieren.
Aber man kann doch keine HTTP-Ressource als Netzlaufwerk einbinden?!
genders
User
Beiträge: 31
Registriert: Samstag 23. Februar 2008, 12:26
Wohnort: Innsbruck / Tirol / Österreich

ice2k3: FTP Zugriff auf meinen Wepspace ist natürlich möglich

Zu den übrigen Punkten kann ich aus terminlichen Gründen erst am Wochenende antworten, danke für Eure Stellungnahmen, das es nicht einfach wird, war mir schon klar.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

genders hat geschrieben:ice2k3: FTP Zugriff auf meinen Wepspace ist natürlich möglich
Wenn du nur 1 schreibender Client hast, ist es mit FTP relativ leicht möglich.
Du holst von jedem Client einfach die aktuelle Datei (Holen könntest auch über HTTP machen) und mit dem "Writer" lädst du die veränderte Datei regelmäßig mit FTP hoch.
Mit mehreren "Writern" ist dieses Vorgehen natürlich (fast) unmöglich zu synchronisieren. Außer du hast nur INSERT INTO, kein UPDATE und keine FK-Constraints, dann könnte man auch noch mehrere Writer mehr oder weniger einfach synchronisieren.

Ansonsten sehe ich da keine sinnvolle Lösung, die mit HTTP/FTP funktionieren könnte.
genders
User
Beiträge: 31
Registriert: Samstag 23. Februar 2008, 12:26
Wohnort: Innsbruck / Tirol / Österreich

Wo das SQLite-File im Netzwerk liegt ist egal, hier nun das Ergebnis von den Versuchen im Heimnetzwerk:

Code: Alles auswählen

import os
import sqlite3

# Var memory
# complete_dbname = ":memory:"

# Var without path in the actual directory
# complete_dbname = "uvoptestdb.sqlite"

# Var in a subdirectory of the actual directory is not allowed,
# we need a full qualified path
# complete_dbname = "C:\Tischtennis\UVOP\data\uvoptestdb.sqlite"

# Var with compete path in private network
complete_dbname = "\\\Tttv1700\c\Tischtennis1700\uvoptestdb.sqlite"

if os.path.isfile(complete_dbname):
  print complete_dbname
  os.remove(complete_dbname)
try:
  con = sqlite3.connect(complete_dbname)
  cur = con.cursor()
usw..
Es fehlt nur mehr das mit TCP/IP am Webspace angebunde.

Das mehr geht, ist aus folgendem Link ersichtlich: http://oneledger.co.uk/sql4sockets.html, aber soweit bin ich leider noch nicht.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Dazu müsstest du immer noch ein Programm auf dem Webspace starten, und das kannst du ja nicht.

TCP/IP != Webspace

Du kannst (durch ein extra Programm) SQlite über TCP/IP ansprechen, das ist schon möglich, hab ich auch schon gemacht. Allerdings geht das nicht über Webspace. Komm von dieser seltsamen Idee endlich mal weg, es geht einfach nicht vernünftig. Besorg dir halt Webspace mit DB-Server (allerdings musst du dann darauf achten, dass die DB auch von außen erreichbar ist, das ist bei den meisten Anbietern vermutlich nicht so) wenn du das unbedingt benötigst oder lass selber zu Hause ein Server laufen.

P.S. Dass Sqlite über Netzlaufwerke geht, hab ich bereits schon 2 mal erwähnt, das war echt unnötig noch zu beweisen...
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

genders hat geschrieben:Es fehlt nur mehr das mit TCP/IP am Webspace angebunde.

Das mehr geht, ist aus folgendem Link ersichtlich: http://oneledger.co.uk/sql4sockets.html, aber soweit bin ich leider noch nicht.
Auch dafür musst du auf der Maschine die Dateizugriff auf das SQLite-File hat das Programm starten, das dir den Zugang via Socket zur Verfügung steht.

Statt ein Datenbank-Placebo wie SQLite krampfhaft für Netzwerktauglichkeit via TCP/IP aufbohren zu wollen solltest du wirklich einfach eine direkt dafür vorgesehene Datenbank wie z.B. Postgres nehmen.

Warum willst du um einen Kaffee zu erhalten die Kaffeebohnen mit einem Hammer zu Pulver schlagen, durch Reiben eines Stockes Feuer entfachen und dann mit immer länger werdenden Armen Wasser in einem Eisenkessel über dem Lagerfeuer zum Kochen bringen statt einfach einen vorhandenen Kaffeevollautomaten zu verwenden?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo genders!

/me hat es bereits geschrieben. Und ich würde auch dazu raten, nicht an SQLite festzuhalten, sondern eine genau dafür vorgesehene Datenbank wie z.B. PostgreSQL zu verwenden.

Du kannst dann von jedem Client aus auf PostgreSQL zugreifen (sogar verschlüsselt) und mit den Daten arbeiten. Um weniger als 10 Euro im Monat, bekommst du einen "Virtuellen Webserver", auf dem du tun kannst was du möchtest -- auch einen PostgreSQL-Server installieren und so einstellen, dass man von Außen darauf zugreifen kann. Um 50 Euro kannst du dir sogar einen leistungsfähigen Server anmieten.

Du kannst auch eine Middleware programmieren, die auf dem Webserver läuft und dort direkt mit der Datenbank arbeitet. Statt mit dem Datenbankserver, verbinden sich die Clients dann mit dem selbst geschriebenen Serverprogramm.

--------

Nur mit der Aussage von /me, dass SQLite ein Datenbank-Placebo sei, bin ich nicht einverstanden. SQLite ist eine Datenbank die sich sehr einfach in Desktop-Programme einbinden lässt (Embedded-Database). Sie ist schnell und man kann damit wunderbare Programme schreiben. Sie ist nur keine Datenbank, die für den Client-Server-Betrieb vorgesehen ist. Dafür verwendet man Datenbanksysteme wie PostgreSQL. Ich würde ja auch keinen PostgreSQL-Server für eine einfache Desktop-Anwendung verwenden.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

gerold hat geschrieben:Nur mit der Aussage von /me, dass SQLite ein Datenbank-Placebo sei, bin ich nicht einverstanden.
Ich wollte absichtlich ein wenig garstig sein.

Ich arbeite seit Ewigkeiten mit Datenbanken deutlich größeren Kalibers und da schaut man dann gerne mit leicht überheblichem Wohlwollen zu den Kleinen runter, tätschelt ihre Tabellen und sagt "Ach, wie niedlich." ;-)
genders
User
Beiträge: 31
Registriert: Samstag 23. Februar 2008, 12:26
Wohnort: Innsbruck / Tirol / Österreich

Ich bin für jede Antwort dankbar und schätze Eure Einwände. Manchmal ist vielleicht der Hintergrund nicht durchsichtig, ich habe und kann Systeme definieren, entsprechend organisieren und umsetzen. Manche Diskussionen arten zu Glaubensfragen aus. Bei dieser kommen mir folgende Gedanken :roll: :
-muss ich mir, wenn ich eine Bleistiftschachtel brauche, ein Hochsee-Containerschiff anschaffen?
-wie fühlt sich ein Microkredidvermittler (€ 3,- pro Kredit) der 3. Welt wenn er bei uns mit einem Kreditvermittler über Kreditvergaben spricht?

Die SQLite-Datei ist bei einem Zugriff für einen weiteren Zugriff kurze Zeit gesperrt. Dies muss bei einer Anfrage berücksichtigt werden. Bei etwa 15 Zugriffen am Tag ist eine kurze Verzögerung unter einer Sekunde (laut Beschreibung) wohl kaum ein Problem. Voraussetzung dafür ist die technische Lösung der Einrichtung der Verbindung (Kommunikation) zur SQLite-Datei am Webspace (um die es bei meiner Anfrage ja ging), damit das getestet werden kann. Das Testergebnis kann dann positiv oder negativ (zu langsam, zu unsicher, zu störanfällig usw.) ausfallen. Ich habe für andere Anwendungen schon andere Dateien periodisch hinaufgeladen und fürs herunterladen zur Verfügung gestellt.

Es gibt eine ganze Reihe von anderen Lösungsansätzen für mein Problem, dann müsste ich aber den Hausbau erläutern. Jeder Vergleich hinkt, aber ich will nur "einen Nagel in ein Brett schlagen", den richtigen Hammer (urllib2, socket .. ?) dazu und sehen ob das so geht.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Dieser Lock von Sqlite funktioniert doch logischerweise nicht über deinen Webspace, sondern nur wenn du direkt über das Dateisystem auf die Datenbank-Datei zugreifst!
Du müsstest also zuerst die Datei holen, Änderungen hineinschreiben und dann die Datei wieder hochladen. Für diese Zeit müsstest du einen eigenen Lock aufsetzen. Dazu bräuchtest du atomare Operationen, die dir IMHO mit den dir gegebenen Technologien nicht zu Verfügung stehen.

Analog zu deinem Hammer-Beispiel: Du bräuchtest einen Hammer, der verhindert, dass ein zweiter Hammer gleichzeitig auf den Nagel schlägt. So einen Hammer gibt es aber nicht, du musst also was anderes wie den Hammer nehmen ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich verstehe den Zorus nicht ganz, den der OP hier durchziehen will! Wenn er nun einmal mit SQLite arbeiten will, soll er das doch tuen. Ihm muss ja nur klar sein, dass er dadurch mit einigen Risiken leben muss, die man so nur schwer umgehen kann; und wenn, dann nur mit hohem Aufwand.

@OP: Kannst Du denn auf cgi o.ä. zurückgreifen? Denn ohne diese Möglichkeit, wird es ja noch schwerer einen (wenn auch minimalen und ggf. nicht zu 100% sicheren) Lock zu realisieren...

Ich stelle mir hier einfach die Frage: Wo liegt das primäre Interesse? An der Applikation und der Datenbank als Storage und Abfrageinstrument oder an Netzwerk-Spielereien?
genders
User
Beiträge: 31
Registriert: Samstag 23. Februar 2008, 12:26
Wohnort: Innsbruck / Tirol / Österreich

Mir ging es um die Abklärung der technischen Möglichkeiten und Grenzen. Da ich ungern offene Fragen hinterlasse, habe ich SQLite auch auf einem eingebundenen Webspace-Laufwerk (Windows, ftp ähnlich http://www.namepros.com/webmaster-tutor ... -hard.html) versucht, geht nicht, internes Protokoll ist nicht kompatibel. Z.B. funktioniert MS Access (ohne besonderen Testbetrieb). Andere Leute haben mit SQLite das Problem prinzipiell gelöst, wenn ich http://www.sqlite.org/cvstrac/wiki?p=SqliteNetwork schon bei meinen ersten Recherchen vor der Anfrage gefunden hätte, hätte ich gar nicht angefragt.

Für eine Lösung mit Download habe ich übrigens ein Beispiel bei Trac gefunden: http://trac2.assembla.com/programowanie ... tchdata.py, es scheint also Fälle zu geben, wo so etwas sinnvoll ist.

Danke für Eure Reaktionen, sie haben Druck auf meine Tätigkeiten zur Erledigung dieses Punktes gemacht. Eine Beschäftigung mit den Protokollen auf Low-Level-Basis wäre zwar interessant aber zeitaufwendig, ich habe auch andere Möglichkeiten, es war eine der Möglichkeiten, Download bleibt als Alternative.

mfg
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

genders hat geschrieben:Andere Leute haben mit SQLite das Problem prinzipiell gelöst, wenn ich http://www.sqlite.org/cvstrac/wiki?p=SqliteNetwork schon bei meinen ersten Recherchen vor der Anfrage gefunden hätte, hätte ich gar nicht angefragt.
Dass ich das persönlich auch schon über TCP/IP gelöst habe, hatte ich schon erwähnt und ebenfalls, dass das in Bezug zu deiner Anfrage keine Relevanz spielt.
genders hat geschrieben:Für eine Lösung mit Download habe ich übrigens ein Beispiel bei Trac gefunden: http://trac2.assembla.com/programowanie ... tchdata.py, es scheint also Fälle zu geben, wo so etwas sinnvoll ist.
In diesem Beispiel findet allerdings kein Upload statt, und das ist ja die entscheidende kritische Stelle. Klar, dass man problemlos die Daten holen kann, die es schon gibt. Nur "UPDATE" und "INSERT INTO" stellen natürlich ein Problem dar, dass in diesem Beispiel nicht gelöst ist. (Ja, diese Operationen werden zwar durchgeführt, allerdings nur auf der lokalen Sqlite-Datei und nicht auf auf der Server-Datei).
Antworten