SQLAlchemy/Elixir, MySQL, Transactions und Character Set

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

SQLAlchemy/Elixir, MySQL, Transactions und Character Set

Beitragvon burli » Samstag 31. Mai 2008, 12:20

Hi,
ich arbeite mich gerade ein wenig in SQLAlchemy oder besser in Elixir ein. Da ich für spätere Anwendungen Transactions benötige habe ich darauf ein besonderes Augenmerk. Dabei ist mir aufgefallen das Elixir MyISAM Tabellen verwendet die, soweit ich weiß, nicht transaktionssicher sind.

Weiterhin ist mir aufgefallen das trotz angabe von Unicode die Tabellen nur mit cp1252

Wie kann ich das einstellen das die InnoDB Datenbank Engine verwendet wird und das die tabellen mit Unicode Charset erstellt werden?
Ist das noch in Elixir zu finden oder muss ich bei SQLAlchemy suche?
Ist der Ablauf dann auch wirklich transaktionssicher wenn ich InnoDB verwende?
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Samstag 31. Mai 2008, 14:48

InnoDB macht deine Anwendung nicht transaktionssicher, sondern ermöglicht nur Transaktionen, die du schon selbst in `begin` und `commit` bzw. `rollback` einschließen musst bzw. das entsprechende Äquivalent von SQLalchemy benutzen musst.

(Wie man's den Datenbanktyp mit Elixier automatisch erzeugen kann, weiß ich leider nicht...)

Stefan
burli
User
Beiträge: 1116
Registriert: Dienstag 9. März 2004, 18:22

Beitragvon burli » Samstag 31. Mai 2008, 15:10

sma hat geschrieben:InnoDB macht deine Anwendung nicht transaktionssicher, sondern ermöglicht nur Transaktionen, die du schon selbst in `begin` und `commit` bzw. `rollback` einschließen musst bzw. das entsprechende Äquivalent von SQLalchemy benutzen musst.


Nein, genau anders rum wird ein Schuh draus. Man kann Transaktionen mit Begin und Commit auch auf MyISAM ausführen, aber es hat keinen Effekt.

Ich lass mir die Debug Ausgaben von Elixir anzeigen und da sieht man, wenn man Flush() ausführt, das die Aktion mit Begin startet und mit Commit beendet wird, trotz dem das es sich noch um eine MyISAM Tabelle handelt.

Aber alle Befehle werden sofort ausgeführt und nicht erst durch Commit. Daher funktioniert Rollback nicht und sollte zufällig ein anderer Zugriff gleichzeitig laufen können die sich in die Quere kommen.

Im Gegensatz dazu reagiert InnoDB richtig auf Begin und Commit

Elixir macht es eigentlich schon richtig (soweit ich das sehen kann), nur mit der falschen DB Engine

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder