Hallo Forum!
Ich entwickle seit rund 15 Jahren Anwendungen für den Bereich Handel (ERP, CRM) und in den letzten Jahren fast nur noch auf Web-Basis.
Vielleicht kennt jemand von euch Progress 4GL. War und ist jenes (kommerzielle) Entwicklungsumfeld, unter dem ich als selbstständiger Entwickler tätig bin.
Seit rund zwei Jahren beschäftigt mich der Gedanke, ein Open-Source Warenwirtschaftssystem zu entwicklen.
Ich bin jetzt zumindest so weit, daß ich mich auf Python und PostgreSQL festgelegt hab.
Worum ich die Pythoniker hier bitten möchte, ist, mir ein wenig auf die Sprünge zu helfen, bei der Entscheidung des Frameworks bzw. der darunter liegenden Technik.
Mir geht es dabei um zwei Aspekte:
- PostgreSQL-Adapter
Ich würde gerne (naiv forumliert), ein DB-Feld als Objekt betrachen können. Z.Bsp.: database.table.field = value.
Ich möchte aber dennoch "reines" SQL anwenden können.
Ist dies ein Wiederspruch?
- Webserver-Kommunikation
Von "lighttpd/fastcgi/WSGI" über "CherryPython/web-server" bis hin zu "zope" findet man eine Menge Möglichkeiten
Wichtig ist mir bloß, daß es einen Applikation-Server gibt, der einen HTTP-Request entgegennimmt, ohne daß er erneut die DB connecten muß.
Falls jemand selbst Erfahrungen in dieser Richtung hat, wäre es schön, wenn er/sie was dazu sagen könnte.
Danke im Voraus!
Hawelka
Open Source Web-Anwendung (ERP)
Hi!
just my 2 cents, joe
Ganz allgemeine bemerkung: das wäre das letzte was ich täte. Wenn schon "reines" SQL zum einsatz kommt, sollte das ganze auch offen für alle sql-dbs sein, die python unterstützt. Und eine installation zu testzwecken mit einem eventuell schon mitgelieferten sqlite wird mit sicherheit eher durchgeführt, als eine bei der man noch extra postgresql installieren muss, zumal wenn man (emotional) eher zur mysql-fraktion gehört.Hawelka hat geschrieben:und PostgreSQL festgelegt hab.
just my 2 cents, joe
Danke Joe!
Ist genau jene Art von Antwort, auf die ich hoffte!
Ich versuche, eben solche Aspekte zu sammeln.
Gruß!
Hawelka
Ist genau jene Art von Antwort, auf die ich hoffte!
Ich versuche, eben solche Aspekte zu sammeln.
Gruß!
Hawelka
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi!Anonymous hat geschrieben:Ganz allgemeine bemerkung: das wäre das letzte was ich täte.Hawelka hat geschrieben:und PostgreSQL festgelegt hab.
PostgreSQL ist eine wunderbare Datenbank für Datenbankprogrammierer. Man kann dieses Ding so richtig ausreizen, wenn man Trigger, Prozeduren, Views, Referenzen zwischen den Tabelle, usw. einsetzt.
Das hilft unter anderem auch, Fehler von verschiedenen Backends zu vermeiden bzw. zu reduzieren oder Datenleichen zu vermeiden.
Das sind alles nur Vorteile von PostgreSQL, die du in dem Moment im weiten Bogen wegschmeißen würdest, wenn du datenbankunabhängig programmierst.
Datenbankunabhängig heißt meistens, den kleinsten gemeinsamen Nenner zu finden und nur bis zu dieser Grenze zu verwenden.
Eine Warenwirtschaft oder ein ERP-System braucht, meiner Meinung nach, ein gutes Backend. Verzichte nicht darauf, nur um datenbankunabhängig zu werden.
mfg
Gerold
Zuletzt geändert von gerold am Mittwoch 2. November 2005, 09:13, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Hawelka!Hawelka hat geschrieben: - Webserver-Kommunikation
Von "lighttpd/fastcgi/WSGI" über "CherryPython/web-server" bis hin zu "zope" findet man eine Menge Möglichkeiten
Wichtig ist mir bloß, daß es einen Applikation-Server gibt, der einen HTTP-Request entgegennimmt, ohne daß er erneut die DB connecten muß.
Ich kann es dir nicht empfehlen, da ich noch keine PostgreSQL-Anwendung mit Zope programmiert habe. Theoretisch sollte es aber kein Problem sein.
Zope kann über einen Datebankadapter (DA) mit PostgreSQL verbunden werden. Diese Verbindung bleibt bestehen. Es muss sich also nicht ständig neu zur Datenbank verbinden.
Datenbankabfragen, die so gut wie immer die gleichen Daten zurück liefern, können sogar gecached werden. Eine Datenbankabfrage kann so eingestellt werden, dass diese z.B. nur jede halbe Stunde erneut ausgeführt. In der Zwischenzeit werden die gecachten Daten für die Rückgabe verwendet.
Zope läuft standardmäßig auch als HTTP-XMLRPC-Dienst. Das bedeutet für dich, dass du Zope auch als Middleware verwenden kannst. Einfache Frontends oder kleine Tools können von anderen Computern aus deine Anwendung ansprechen, Daten übergeben oder abrufen.
Wenn ich dich zu Zope als Application-Server überreden konnte, dann empfehle ich dir für diese Anwendung schon Zope3 zu verwenden. Zope3 glänzt mit neuem Design, und das nicht nur optisch
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
http://www.benjiyork.com/quick_start/gerold hat geschrieben:Zope3 glänzt mit neuem Design, und das nicht nur optisch
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hi Gerold!
Ich bin es gewöhnt, Trigger zum Erhalt der referentiellen Integrität zu verwenden. Einmal einen "Delete-Trigger" geschrieben, und sich nie wieder Gedanken machen, wer wo wann einen solchen Record löschen wird.
Hinsichtlich DB-Unabhängigkeit, wäre mir ja in erster Linie wichtig, daß sich jemand mit einer externen Anwendung mit der DB connecten könnte (z.Bsp. zur Übernahme der Bestandsdaten in ein Spreadsheet etc.). Das sollte aber via ODBC oder JDBC auch bei PostgreSQL möglich sein.
LG!
Erich
Vor allem Trigger wären mir schon sehr wichtig.gerold hat geschrieben: PostgreSQL ist eine wunderbare Datenbank für Datenbankprogrammierer. Man kann dieses Ding so richtig ausreizen, wenn man Trigger, Prozeduren, Views, Referenzen zwischen den Tabelle, usw. einsetzt.
Das hilft unter anderem auch, Fehler von verschiedenen Backends zu vermeiden bzw. zu reduzieren oder Datenleichen zu vermeiden.
Ich bin es gewöhnt, Trigger zum Erhalt der referentiellen Integrität zu verwenden. Einmal einen "Delete-Trigger" geschrieben, und sich nie wieder Gedanken machen, wer wo wann einen solchen Record löschen wird.
Verstehe!Das sind alles nur Vorteile von PostgreSQL, die du in dem Moment im weiten Bogen webschmeißen würdest, wenn du datenbankunabhängig Programmierst.
Datenbankunabhängig heißt meistens, den kleinsten gemeinsamen Nenner zu finden und nur bis zu dieser Grenze zu verwenden.
Eine Warenwirtschaft oder ein ERP-System braucht, meiner Meinung nach, ein gutes Backend. Verzichte nicht darauf, nur um datenbankunabhängig zu werden.
Hinsichtlich DB-Unabhängigkeit, wäre mir ja in erster Linie wichtig, daß sich jemand mit einer externen Anwendung mit der DB connecten könnte (z.Bsp. zur Übernahme der Bestandsdaten in ein Spreadsheet etc.). Das sollte aber via ODBC oder JDBC auch bei PostgreSQL möglich sein.
LG!
Erich
Hi Gerold!
Was ich damit konkret meine ist:
Ein Server (z.Bsp. Apache mit FastCGI-Handler) lauscht auf Requests, deren URL sich auf ein Python-Script bezieht. Dieser Server weiß zunächst daß 10 (oder 100) Anwendungsprozesse (Python-Interpreter-Prozesse) darauf warten die Requestdaten entgegenzunehmen. Der Server weiß aber auch, welcher dieser 10 Anwendungsprozesse berade beschäftigt ist und übergibt die Daten einem der freien Prozesse.
Im Notfall wird ein 11. Prozess gestartet oder aber gewartet bis wieder einer frei ist.
Wesentlich dabei ist aber, daß diese 10 Anwendungsprozesse so agieren, daß sie nur beim erstmaligen Start sich mit dem DB-Server verbinden und daß nach Abarbeitung eines Requests die Prozesse wieder in Warteposition gehen.
Bei einem Intranet-Warenwirtschaftssystem möchte man aber immer genau das Gegenteil. Jeder Bestand der verändert wurde, soll sofort wirksam und sichtbar sein. Jeder Lagerbucheintrag soll sofort merkbar sein. Jede Artikeländerung ....
Bis jetzt war ich lediglich begeistert vom Umfang und den Möglichkeiten. Richtig begriffen, was Zope eigentlich im Kern ist, hab ich noch nicht
LG!
Erich
Was mir hier geistig noch fehlt, wäre der entsprechende Application-Server. Oder ist Zope genau dieses?gerold hat geschrieben: Zope kann über einen Datebankadapter (DA) mit PostgreSQL verbunden werden. Diese Verbindung bleibt bestehen. Es muss sich also nicht ständig neu zur Datenbank verbinden.
Was ich damit konkret meine ist:
Ein Server (z.Bsp. Apache mit FastCGI-Handler) lauscht auf Requests, deren URL sich auf ein Python-Script bezieht. Dieser Server weiß zunächst daß 10 (oder 100) Anwendungsprozesse (Python-Interpreter-Prozesse) darauf warten die Requestdaten entgegenzunehmen. Der Server weiß aber auch, welcher dieser 10 Anwendungsprozesse berade beschäftigt ist und übergibt die Daten einem der freien Prozesse.
Im Notfall wird ein 11. Prozess gestartet oder aber gewartet bis wieder einer frei ist.
Wesentlich dabei ist aber, daß diese 10 Anwendungsprozesse so agieren, daß sie nur beim erstmaligen Start sich mit dem DB-Server verbinden und daß nach Abarbeitung eines Requests die Prozesse wieder in Warteposition gehen.
Ich denke, daß dieses Feature eher für Internet-Anwendungen mit riesen Datenbeständen geeignet ist.Datenbankabfragen, die so gut wie immer die gleichen Daten zurück liefern, können sogar gecached werden. Eine Datenbankabfrage kann so eingestellt werden, dass diese z.B. nur jede halbe Stunde erneut ausgeführt. In der Zwischenzeit werden die gecachten Daten für die Rückgabe verwendet.
Bei einem Intranet-Warenwirtschaftssystem möchte man aber immer genau das Gegenteil. Jeder Bestand der verändert wurde, soll sofort wirksam und sichtbar sein. Jeder Lagerbucheintrag soll sofort merkbar sein. Jede Artikeländerung ....
Das klingt "fetzig"Zope läuft standardmäßig auch als HTTP-XMLRPC-Dienst. Das bedeutet für dich, dass du Zope auch als Middleware verwenden kannst. Einfache Frontends oder kleine Tools können von anderen Computern aus deine Anwendung ansprechen, Daten übergeben oder abrufen.
Ich werde mir Teile der Zope-Doku nochmals reinziehen.Wenn ich dich zu Zope als Application-Server überreden konnte, dann empfehle ich dir für diese Anwendung schon Zope3 zu verwenden. Zope3 glänzt mit neuem Design, und das nicht nur optisch
Bis jetzt war ich lediglich begeistert vom Umfang und den Möglichkeiten. Richtig begriffen, was Zope eigentlich im Kern ist, hab ich noch nicht
LG!
Erich
-
- User
- Beiträge: 52
- Registriert: Dienstag 21. September 2004, 06:58
- Wohnort: Adelzhausen
- Kontaktdaten:
Hi...
also PostgreSQL als Datenbank ist ja schon mal erste Wahl, das kann ich Dir nur bestätigen. Ich habe einige recht grosse Projekte mit PostgreSQL als Datenbank realisiert(bis 2,5 Terabyte Daten) und bisher noch nie Probleme gehabt.
Als Application Server oder wie auch immer Du das nennen willst, kann ich Dir CherryPy empfehlen, das ist wirklich das genialste Toolkit für solche Sachen. Von mod_python kann ich Dir aus persönlicher Erfahrung nur abraten, ich hab damit eher schlechte Erfahrung gemacht. Nochmal zu CherryPy, ich hab damit für mehrere Kunden die verschiedensten Systeme gebaut und nie Probleme gehabt, zumal du in Verbindung mit dem Apache wirklich coole Sachen machen kannst...
Hast Du auch vor einen grafischen Client zu entwickeln? Wenn ja, wirf mal nen Blick auf Qt, die Jungs von Trolltech haben echt Ahnung davon was sie tun.
Gruss
Sebastian
also PostgreSQL als Datenbank ist ja schon mal erste Wahl, das kann ich Dir nur bestätigen. Ich habe einige recht grosse Projekte mit PostgreSQL als Datenbank realisiert(bis 2,5 Terabyte Daten) und bisher noch nie Probleme gehabt.
Als Application Server oder wie auch immer Du das nennen willst, kann ich Dir CherryPy empfehlen, das ist wirklich das genialste Toolkit für solche Sachen. Von mod_python kann ich Dir aus persönlicher Erfahrung nur abraten, ich hab damit eher schlechte Erfahrung gemacht. Nochmal zu CherryPy, ich hab damit für mehrere Kunden die verschiedensten Systeme gebaut und nie Probleme gehabt, zumal du in Verbindung mit dem Apache wirklich coole Sachen machen kannst...
Hast Du auch vor einen grafischen Client zu entwickeln? Wenn ja, wirf mal nen Blick auf Qt, die Jungs von Trolltech haben echt Ahnung davon was sie tun.
Gruss
Sebastian
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Erich!
Man begreift Zope ziemlich schnell, wenn man das Tutorial durcharbeitet. Das hat man, je nach Konzentration, in einer oder wenigen Stunden durch. Danach versteht man ein wenig, wie die Vorlagensprache funktioniert und die Art, wie Zope auf Datenbanken zugreift. Auch wenn im Tutorial nur auf eine kleine, eingebaute Datenbank zugegriffen wird.
Zum Durcharbeiten dieses Tutorials empfehle ich dir, einfach mal Zope 2.8.4 zu installieren. Du findest unter http://gerold.bcom.at/zope_plone/zope_a ... en_windows eine Anleitung von mir, wie man Zope unter Windows installiert. Diese ist zwar noch für Zope 2.7.4 aber das lässt sich 1 zu 1 auf Zope 2.8.4 umlegen. Dort findest du auch Hinweise auf das Tutorial.
mfg
Gerold
Zope ist ein richtiger Web-Applicationserver und hält mehrere Threads bereit. Die Anzahl der gleichzeitig geöffneten Threads lässt sich in der Konfigurationsdatei einstellen. Alle Threads verwenden die gleiche Datenbankverbindung.Anonymous hat geschrieben:Was mir hier geistig noch fehlt, wäre der entsprechende Application-Server. Oder ist Zope genau dieses?
Pflichtlektüre zu Zope: http://www.dzug.org/Members/vbachs/zboo ... /file_viewAnonymous hat geschrieben:Bis jetzt war ich lediglich begeistert vom Umfang und den Möglichkeiten. Richtig begriffen, was Zope eigentlich im Kern ist, hab ich noch nicht
Man begreift Zope ziemlich schnell, wenn man das Tutorial durcharbeitet. Das hat man, je nach Konzentration, in einer oder wenigen Stunden durch. Danach versteht man ein wenig, wie die Vorlagensprache funktioniert und die Art, wie Zope auf Datenbanken zugreift. Auch wenn im Tutorial nur auf eine kleine, eingebaute Datenbank zugegriffen wird.
Zum Durcharbeiten dieses Tutorials empfehle ich dir, einfach mal Zope 2.8.4 zu installieren. Du findest unter http://gerold.bcom.at/zope_plone/zope_a ... en_windows eine Anleitung von mir, wie man Zope unter Windows installiert. Diese ist zwar noch für Zope 2.7.4 aber das lässt sich 1 zu 1 auf Zope 2.8.4 umlegen. Dort findest du auch Hinweise auf das Tutorial.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hi Sebastian!
Da steht etwas von "ThreadPool"
The threadPool option determines how many threads CherryPy starts to serve requests.
Zumal ich den Ansatz des "Thin Clients" recht gut finde.
Ein Stück Browser am PC und schon kanns losgehen ...
LG!
Erich
seit wann zählt das Einwohnermeldeamt der Volksrepublik China zu deinen Kunden?raist1314 hat geschrieben: Ich habe einige recht grosse Projekte mit PostgreSQL als Datenbank realisiert(bis 2,5 Terabyte Daten) und bisher noch nie Probleme gehabt.
In der Tat. Hab ich beim ersten durchschmökern übersehen.Als Application Server oder wie auch immer Du das nennen willst, kann ich Dir CherryPy empfehlen, das ist wirklich das genialste Toolkit für solche Sachen.
Da steht etwas von "ThreadPool"
The threadPool option determines how many threads CherryPy starts to serve requests.
Ich denke ich hab mit der Web-Version schon genug am HalsHast Du auch vor einen grafischen Client zu entwickeln? Wenn ja, wirf mal nen Blick auf Qt, die Jungs von Trolltech haben echt Ahnung davon was sie tun.
Zumal ich den Ansatz des "Thin Clients" recht gut finde.
Ein Stück Browser am PC und schon kanns losgehen ...
LG!
Erich
Hi Gerold!
Eigentlich wollte ich am Wochenende mein Aquarium umgestalten
Aber die Installation wird das kleinste Problem sein.
Vielen Dank für Deine Infos!
LG!
Erich
Das klingt einschlägig!gerold hat geschrieben: Zope ist ein richtiger Web-Applicationserver und hält mehrere Threads bereit. Die Anzahl der gleichzeitig geöffneten Threads lässt sich in der Konfigurationsdatei einstellen. Alle Threads verwenden die gleiche Datenbankverbindung.
Wow - das Teil hat 436 Seiten.Pflichtlektüre zu Zope: http://www.dzug.org/Members/vbachs/zboo ... /file_view
Eigentlich wollte ich am Wochenende mein Aquarium umgestalten
Ich hab leider (oder Gott sei Dank) nur Linux am rennen.Zum Durcharbeiten dieses Tutorials empfehle ich dir, einfach mal Zope 2.8.4 zu installieren. Du findest unter http://gerold.bcom.at/zope_plone/zope_a ... en_windows eine Anleitung von mir, wie man Zope unter Windows installiert. Diese ist zwar noch für Zope 2.7.4 aber das lässt sich 1 zu 1 auf Zope 2.8.4 umlegen. Dort findest du auch Hinweise auf das Tutorial.
Aber die Installation wird das kleinste Problem sein.
Vielen Dank für Deine Infos!
LG!
Erich
Also Zope ist definitiv nichts, was man mal so eben schnell nebenbei lernt.Anonymous hat geschrieben:Wow - das Teil hat 436 Seiten.Pflichtlektüre zu Zope: http://www.dzug.org/Members/vbachs/zboo ... /file_view
Eigentlich wollte ich am Wochenende mein Aquarium umgestalten
Ähmmm, und wer hat das behauptet?Joghurt hat geschrieben:Also Zope ist definitiv nichts, was man mal so eben schnell nebenbei lernt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi!Anonymous hat geschrieben:Ähmmm, und wer hat das behauptet?Joghurt hat geschrieben:Also Zope ist definitiv nichts, was man mal so eben schnell nebenbei lernt.
Ich glaube, er spielt da auf die Aussage "Eigentlich wollte ich am Wochenende mein Aquarium umgestalten" an.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hi Gerold!
Ich weiß, aber diese Aussage hatte ungefähr so viel Qualität wie: "Umso heißer desto Autsch!"
LG!
Erich
Ich weiß, aber diese Aussage hatte ungefähr so viel Qualität wie: "Umso heißer desto Autsch!"
LG!
Erich
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
ich weiß, ich wiederhole mich, aber WSGI deckt deine Bereiche ab, da es auf FastCGI, SCGI und mod_python sowie noch anderen läuft, die im Speicher bleiben. Du kannst dann eine persistente Verbindung aufbauen, die erst beim schließen des Threads geschlossen wird.Hawelka hat geschrieben:- Webserver-Kommunikation
Von "lighttpd/fastcgi/WSGI" über "CherryPython/web-server" bis hin zu "zope" findet man eine Menge Möglichkeiten
Wichtig ist mir bloß, daß es einen Applikation-Server gibt, der einen HTTP-Request entgegennimmt, ohne daß er erneut die DB connecten muß.
TUFKAB – the user formerly known as blackbird