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

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).
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo genders!

Dir sollte klar sein, dass, wenn du kein Programm auf dem Server laufen hast (wie z.B. PostgreSQL oder ein CGI-Programm) welches die Daten aus der DB ausliest und gefiltert zum Client schickt, dann musst du jedes mal die ganze Datenbank übertragen. Auch wenn du nur ein paar Daten brauchst.

Das sehe ich mir dann mal an, wenn die DB ein paar MB groß geworden ist.

Und das ist der Grund, weshalb wir dir mit all unserer Kraft sagen wollten, dass du ein Programm auf dem Server brauchst. Sei es ein PostgreSQL-Serverprogram, ein MySQL-Serverprogramm, oder ein Serverprogramm das die SQLite-Datenbank verwendet. Du brauchst ein Programm auf dem SERVER.

Wenn du das nicht beherzigst, dann wirst du für jede Kleinigkeit immer die ganze Datenbankdatei übertragen müssen. Das ist auch bei kleinen Datenmengen nicht wirklich brauchbar.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
amiganer68
User
Beiträge: 18
Registriert: Mittwoch 1. Juli 2009, 14:20

Hallo!

Jetzt möchte ich mich auch mal kurz mit einem Gedanken dazu melden:

Wenn ich richtig verstehe, was Du willst, dann solltest Du nicht SQLite verwenden, sondern Dir mal SQLAlchemy ansehen. Du brauchst dann nur einen WEB-Hoster, der dich auch von außen auf die dortige Datenbank zugreifen läßt. In der Regel (wurde schon gesagt) geht das ab einem vServer und (leider) nicht auf einem normalem Webspace.
Hier würdest Du dann SQL für den ZUgriff erzeugen und die Daten in der Datenbank auf dem Webspace ablegen.

Christian
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

amiganer68 hat geschrieben: Wenn ich richtig verstehe, was Du willst, dann solltest Du nicht SQLite verwenden, sondern Dir mal SQLAlchemy ansehen. Du brauchst dann nur einen WEB-Hoster, der dich auch von außen auf die dortige Datenbank zugreifen läßt.
SQLAlchemy und SQLite sind ganz unterschiedliche Dinge.

In diesem Kontext ist SQLAlchemy nur der objektorientierte Zucker für den Zugriff. Wenn eine Datenbank auf dem Server läuft und nach außen hin offen ist, dann kannst du auch ohne den SQLAlchemy-Overhead darauf zugreifen.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

/me hat geschrieben:In diesem Kontext ist SQLAlchemy nur der objektorientierte Zucker für den Zugriff.
SQLAlchemy hat ein ORM, dass heisst dass du es benutzen musst.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

DasIch hat geschrieben:SQLAlchemy hat ein ORM, [...]
Das würde ich anders ausdrücken: SQLAlchemy ist ein ORM.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

/me hat geschrieben:Das würde ich anders ausdrücken: SQLAlchemy ist ein ORM.
Was ich mit meinem Satz sagen wollte, ist dass genau dass nicht stimmt. Du solltest mal einen Blick auf die Expression Language werfen auf der das ORM aufbaut.

Ich denke man sollte sich die Expression Language zumindest einmal angesehen haben bevor man das ORM benutzt.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

DasIch hat geschrieben:
/me hat geschrieben:Das würde ich anders ausdrücken: SQLAlchemy ist ein ORM.
Was ich mit meinem Satz sagen wollte, ist dass genau dass nicht stimmt. Du solltest mal einen Blick auf die Expression Language werfen auf der das ORM aufbaut
Entweder reden wir aneinander vorbei oder wir sind tatsächlich einfach unterschiedlicher Meinung. ;-)

Möchtest du mir hier ernsthaft sagen ich solle meine Datenbankabfragen via Python in einer merkwürdigen Expression Language modellieren um dann auch noch auf das eigentliche ORM zu verzichten? Das kann ich doch nur falsch verstanden haben, oder?

Das Schlimmste an ORMs ist für mich genau diese Art und Weise wie dort Queries definiert werden. Für simple Sachen ist das ganz nett, aber ich habe hier SQL-Statements über mehrere Bildschirmseiten mit einer zum Teil zweistelligen Tabellenanzahl. So etwas will man nicht mehr über ein ORM modellieren und deshalb verwende ich dafür klassisches SQL via cx_oracle oder psycopg2.

Ich brauche keinen zusätzlichen Layer dazwischen und genau das ist das worauf ich zuletzt hinaus wollte. Ursprünglich ging es mir nur darum zu erklären, dass man nicht SQLite durch SQLAlchemy austauschen kann weil es sich dabei auf der einen Seite um eine Server- und auf der anderen um eine Client-Komponenten handelt.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

/me hat geschrieben:Möchtest du mir hier ernsthaft sagen ich solle meine Datenbankabfragen via Python in einer merkwürdigen Expression Language modellieren um dann auch noch auf das eigentliche ORM zu verzichten? Das kann ich doch nur falsch verstanden haben, oder?
Auf die Weise hat man mehr Kontrolle über dass erzeugte SQL als beim ORM und ist unabhängig von der Datenbank. Die Lösung ist nicht so abwegig.
amiganer68
User
Beiträge: 18
Registriert: Mittwoch 1. Juli 2009, 14:20

/me hat geschrieben:
amiganer68 hat geschrieben: Wenn ich richtig verstehe, was Du willst, dann solltest Du nicht SQLite verwenden, sondern Dir mal SQLAlchemy ansehen. Du brauchst dann nur einen WEB-Hoster, der dich auch von außen auf die dortige Datenbank zugreifen läßt.
SQLAlchemy und SQLite sind ganz unterschiedliche Dinge.

In diesem Kontext ist SQLAlchemy nur der objektorientierte Zucker für den Zugriff. Wenn eine Datenbank auf dem Server läuft und nach außen hin offen ist, dann kannst du auch ohne den SQLAlchemy-Overhead darauf zugreifen.
Das beide nicht identisch sind, war mir klar. Doch kam ich, als ich versucht habe, hinter das ursprüngliche Problem zu kommen auf folgendem Schluss: SQLite wird mit SQL gefüttert um Daten zu speichern/lesen. Jetzt möchte der Kollege hier in seiner ursprünglichen Frage diese Daten, die bei SQLite in einer Datei gespeichert werden, auf einem Webspace auslagern. Da auf dem Webspace meistens schon eine Datenbank läuft, wäre hier SQLAlchemy als bindeglied nicht verkehrt. Und evtl. kann er auch noch mit nur wenigen SQL-Kenntnissen diese Sache abstrahieren.
Darum mein Beitrag zum Thema.

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

amiganer68 hat geschrieben: Das beide nicht identisch sind, war mir klar. Doch kam ich, als ich versucht habe, hinter das ursprüngliche Problem zu kommen auf folgendem Schluss: SQLite wird mit SQL gefüttert um Daten zu speichern/lesen. Jetzt möchte der Kollege hier in seiner ursprünglichen Frage diese Daten, die bei SQLite in einer Datei gespeichert werden, auf einem Webspace auslagern. Da auf dem Webspace meistens schon eine Datenbank läuft, wäre hier SQLAlchemy als bindeglied nicht verkehrt. Und evtl. kann er auch noch mit nur wenigen SQL-Kenntnissen diese Sache abstrahieren.
Darum mein Beitrag zum Thema.

Christian
Vielleicht liest du dir in Zukunft den gesamten Thread durch, bevor du irgendeinen OffTopic-Kommentar abgibst (der dann sogar noch zu weiteren OffTopic-Diskussionen führt...). Das Problem des OP ist, dass er eben keinen DB-Server auf dem Webspace hat und deshalb irgendeine seltsame Lösung mit Sqlite implementieren will.
lunar

@/me: Oh, es steht Dir durchaus frei, auf eine „merkwürdige Expression Language“ zu verzichten, und Deine SQL-Ausdrücke stattdessen mittels Zeichenkettenverknüpfung manuell zusammen zu basteln ;)
Antworten