vielen dank fuer die detalierte uns hilfreiche antworten
ich werd dan schon jetzt auf postgreSQL umsteigen
und danns gibs hoffentlich keine probleme mehr (-;
.
allgemeine probleme bei der erstellung einer web app
Igittt! Das muss ich ja in jeder meiner Dateien schreiben, damit das anstandslos funktioniert. Da finde ich meine Lösung viel magischer und schickergerold hat geschrieben:Hallo!
Das geht sogar noch einfacher:Code: Alles auswählen
try: conn = cherrypy.thread_data.connection except NameError: conn = cherrypy.thread_data.connection = sqlite3.connect("...") cur = conn.cursor() ...
(besonders, da sie auf die "Masse" gerechnet weniger Schreibarbeit erfordert)
@Costi: Du kannst auch MySQL benutzen
MfG EnTeQuAk
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo EnTeQuAk!
Aber deine Variante, glaube ich, wird vom CherryPy-Team vorgeschlagen. Aber irgendwie finde ich im Moment nichts darüber im CherryPy-Wiki.
lg
Gerold
Na ja, so schlimm finde ich das auch wieder nicht. Ich habe meist nur ein Modul von dem aus ich auf die Datenbank zugreife. Und dieses Hauptmodul wird sowiso von den meisten anderen Modulen importiert. Ich denke, damit wäre so eine Funktion (wie unten) kein so schlechter Kompromiss.EnTeQuAk hat geschrieben:Da finde ich meine Lösung viel magischer und schickergerold hat geschrieben:Code: Alles auswählen
try: conn = cherrypy.thread_data.connection except NameError: conn = cherrypy.thread_data.connection = sqlite3.connect("...")
Code: Alles auswählen
import cherrypy
def get_conn():
try:
conn = cherrypy.thread_data.connection
except NameError:
conn = cherrypy.thread_data.connection = sqlite3.connect("...")
return conn
class Root(object):
def index(self):
conn = get_conn()
cur = conn.cursor()
...
index.exposed = True
...
@Costi: Du musst aber nicht unbedingt auf EnTeQuAk hören.EnTeQuAk hat geschrieben:@Costi: Du kannst auch MySQL benutzen
lg
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.
Das habe ich auch. Doch ich bin doch eher der Meinung, bereits funktionierende (und vorgeschlagene) Lösungen vorzuziehen, anstatt eine eigene zu basteln. Es sei denn, die vorhandene ist unbenutzbar oder einfach (wirklich) unschick.Na ja, so schlimm finde ich das auch wieder nicht. Ich habe meist nur ein Modul von dem aus ich auf die Datenbank zugreife. Und dieses Hauptmodul wird sowiso von den meisten anderen Modulen importiert. Ich denke, damit wäre so eine Funktion (wie unten) kein so schlechter Kompromiss.
Im Wiki nicht, aber ich hatte mal einen Post auf der Mailingliste hier, wo Robert entsprechendes geschrieben hatte.Aber deine Variante, glaube ich, wird vom CherryPy-Team vorgeschlagen. Aber irgendwie finde ich im Moment nichts darüber im CherryPy-Wiki.
Hast du dafür auch genauere Gründe, wenn man fragen darf?Costi hat geschrieben:ich find gerolds loesung vie interesanter als ``cherrypy.engine.subscribe`` zu benutzen..
@Gerold:Costi hat geschrieben: trotzdem werde ich mySQL statt posgreSQL benutzen
Nicht traurig sein... du schaffst es noch, ein paar Benutzer zu PostgreSQL zu konvertieren
MfG EnTeQuAk
Ich bin gerade von MySQL auf postgresSQL umgestiegenEnTeQuAk hat geschrieben:@Gerold:Costi hat geschrieben: trotzdem werde ich mySQL statt posgreSQL benutzen
Nicht traurig sein... du schaffst es noch, ein paar Benutzer zu PostgreSQL zu konvertieren
MfG EnTeQuAk
Und mir kommt so schnell kein MySQL mehr auf die Platte, es sei denn es ist nötig
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo blackbird!blackbird hat geschrieben:Und wo ist der connection pool?
Diese Frage verstehe ich nicht. 10 Threads -- 10 Connections. Wenn man eine Connection an ``cherrypy.thread_data`` bindet, dann hat man einen Pool von (bei Standardeinstellung) zehn Connections offen. Ich glaube, dass ich damit nicht wirklich falsch liege. Es ist aber auch schon eine Weile her, dass ich mir ein wenig CherryPy-Quellcode angesehen habe.
Oder wie hast du die Frage gemeint?
lg
Gerold
Zuletzt geändert von gerold am Samstag 8. September 2007, 14:08, 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:
Hallo apollo13!apollo13 hat geschrieben:Ich bin gerade von MySQL auf postgresSQL umgestiegen Und mir kommt so schnell kein MySQL mehr auf die Platte, es sei denn es ist nötig
<Geld auf die Hand blätter...> Und hier die versprochenen 10 Euro. Und das Bier geht auf mich.
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.
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Dann hast du einach nur 10 Threads mit 10 Verbindungen. Also MySQL zb öffnet gestorbene Verbindungen nicht automatisch neu. Zumindest wäre mir das neu. Außerdem kannst du dir auf diese weiße nicht zwei Verbindungen in einen Thread holen oder eine Transaktion beenden lassen während der User schon seine Seite bekommen hat.gerold hat geschrieben:Hallo blackbird!blackbird hat geschrieben:Und wo ist der connection pool?
Diese Frage verstehe ich nicht. 10 Threads -- 10 Connections. Wenn man eine Connection an ``cherrypy.thread_data`` bindet, dann hat man einen Pool von (bei Standardeinstellung) zehn Connections offen. Ich glaube, dass ich damit nicht wirklich falsch liege. Es ist aber auch schon eine Weile her, dass ich mir ein wenig CherryPy-Quellcode angesehen habe.
TUFKAB – the user formerly known as blackbird
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo EnTeQuAk!!gerold hat geschrieben:@EnTeQuAk: Aber deine Variante, glaube ich, wird vom CherryPy-Team vorgeschlagen. Aber irgendwie finde ich im Moment nichts darüber im CherryPy-Wiki.
Jetzt weiß ich wieder, wo ich etwas über Connections in Threads gelesen hatte:
- http://tools.cherrypy.org/wiki/SQLObjec ... Connection
- http://tools.cherrypy.org/wiki/Databases
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:
Hallo blackbird!
Ich halte diesen Overhead für verschwindend gering. Deshalb hätte ich auch unter Server-Vollast kein Problem damit.
Viel mehr, gleichzeitig offene, Verbindungen je Thread werde ich selten benötigen. Man kann es sicher andes lösen, aber sicher nicht einfacher.
lg
Gerold
Wenn so etwas öfter vor kommt, dann kann man ja etwas dagegen tun:blackbird hat geschrieben:MySQL zb öffnet gestorbene Verbindungen nicht automatisch neu.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import psycopg2
import cherrypy
DSN = "dbname='postgres' user='irgendeiner' host='localhost' password='irgendeines'"
def get_conn():
try:
conn = cherrypy.thread_data.connection
# Connection testen
cur = conn.cursor()
cur.execute("SELECT CURRENT_TIMESTAMP")
cur.fetchone()
except (NameError, psycopg2.ProgrammingError):
conn = cherrypy.thread_data.connection = psycopg2.connect(DSN)
return conn
#...
``get_conn1()`` und ``get_conn2()``blackbird hat geschrieben:nicht zwei Verbindungen in einen Thread holen
Viel mehr, gleichzeitig offene, Verbindungen je Thread werde ich selten benötigen. Man kann es sicher andes lösen, aber sicher nicht einfacher.
An so einen Fall kann ich mich jetzt nicht erinnern. -- Darüber habe ich noch nicht nachgedacht. Da müsste man wahrscheinlich irgendwie mit einer globalen Datenbankverbindung arbeiten, die dann die Jobs per Queue bekommt. So z.B.: http://aspn.activestate.com/ASPN/Cookbo ... ipe/496799blackbird hat geschrieben:eine Transaktion beenden lassen während der User schon seine Seite bekommen hat.
lg
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.