DB Transaktionen 2...

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

DB Transaktionen 2...

Beitragvon jens » Dienstag 14. November 2006, 22:09

Hab mir [wiki]DB Transaktionen[/wiki] noch mal angesehen und eine DB Transaktion implementiert...

Aber irgendwie ist mir das noch nicht ganz klar, wie es funktioniert...

Ich hätte eigentlich damit gerechnet, das .rollback() und .commit() am cursor hängen, aber sie kleben am connection objekt...

Wie soll das funktionieren, bei threading??? Also wenn mehrere Threads sich eine connection teilen. Was doch IMHO bei einer fastCGI Anwendung der Fall sein kann.

Ich dachte eigentlich man macht sich an der "kritischen" Programmstelle ein neues Cursor-Objekt, macht damit rum und anschließend ein rollback oder commit. Gleichzeitig mach ein anderer cursor in einem anderen Thread irgendwas mit der DB und nicht's kommt sich in die Quere...

Kann mich da jemand Aufklären?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 14. November 2006, 22:14

Hm... Da schau einer an, aus ID mit cur.lastrowid bei PostgreSQL:
tabellar hat geschrieben:...
nextval('sequenz_name')
currval('sequenz_name')
setval('sequenz_name', newval)
lastval()

Diese Sequenzfunktionen sind sitzungsbezogen und sind von nextval()
Aufrufen anderen Benutzer nicht beeinflusst.


Gibt es auch eine Art "Seqenz Name" bei MySQL? Oder hat das nichts mit meinem oben geschilderten Problem zu tun?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Beitragvon BlackJack » Dienstag 14. November 2006, 22:34

Da wirst Du wohl eine `Connection` pro Thread verwenden müssen.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 15. November 2006, 10:53

Hm. Das ist im Grunde momentan in PyLucid der Fall. Zumindest wenn es als CGI läuft. Da wird für jeden Request eine neue Verbindung aufgebaut.

Nur ich frage mich, was es dann mit den sog. Connection-Pools auf sich hat?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Mittwoch 15. November 2006, 11:47

jens hat geschrieben:Nur ich frage mich, was es dann mit den sog. Connection-Pools auf sich hat?

Hallo Jens!

Ich verwende in meinem Programm SW3 einen dynamischen Connection-Pool. Das bedeutet NICHT, dass jede Funktion, die eine Connection anfordert, die selbe Connection zugewiesen bekommt, sondern dass jede Funktion, die eine Connection anfordert, eine neue oder nicht mehr von anderen Funktionen verwendete Connection zugewiesen bekommt.

Jede Funktion holt sich also eine eigenständige Connection und teilt diese nicht mit anderen Funktionen.

In Python habe ich so etwas noch nicht programmiert, aber so schwer ist das ja auch nicht. Du musst dich nur darum kümmern, dass jede Funktion die eine Connection benutzt, diese beim Beenden der Funktion wieder frei gibt.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder