Seite 1 von 1

Sind Datenbanken gleich ansprechbar?

Verfasst: Montag 7. Mai 2007, 12:41
von sprudel
Hallo. Ich möchte ein etwas größeres Programm machen, in dem unter Umständen auch mehrere Benutzer gleichzeitig auf die Datenbank zugreifen.
Meine erste Frage:
Welche Datenbanken empfehlen sich da?

die zweite Frage:
Ich fände es gut, wenn ich, egal welche Datenbank ich im Endeffekt nun nutze, jede Datenbanke mit dem gleichen Object ansprechen könnte. Beispiel:

Code: Alles auswählen

if(DB == "sqlite"):
DBOBJECT = sqlite3.connect(.....)
elif(DB == "postgre"):
DBOBJECT = postgresql.connect(......)
Zumindest hatte ich mir das so in der Art vorgestellt. Ist das möglich?

Gruß sprudel

Verfasst: Montag 7. Mai 2007, 12:46
von Whitie
Hallo sprudel,
guck mal unter http://www.sqlalchemy.org, ob das was für Dich ist.
Ich kann es nur empfehlen.

Gruß, Whitie

Verfasst: Montag 7. Mai 2007, 12:55
von BlackJack
@sprudel: Das ist grundsätzlich so möglich, Du müsstest allerdings korrekt einrücken und die Klammern bei den Bedingungen sind überflüssig.

Ausserdem gilt die Namenskonvention "GROSSE_BUCHSTABEN" sind Konstanten. Das trifft wohl auf beide Namen nicht zu.

Verfasst: Montag 7. Mai 2007, 13:12
von sprudel
BlackJack hat geschrieben:@sprudel: Das ist grundsätzlich so möglich, Du müsstest allerdings korrekt einrücken und die Klammern bei den Bedingungen sind überflüssig.

Ausserdem gilt die Namenskonvention "GROSSE_BUCHSTABEN" sind Konstanten. Das trifft wohl auf beide Namen nicht zu.
Das mit den Buchstaben merk ich mir ;-) Programmier noch nicht allzu lang Python. Jetzt die Frage:

mache ich dann weiterhin folgendes?:

Code: Alles auswählen

c= dbobject.cursor()
c.commit("Select xyz FROM `tabelle` WHERE ?",(parameter1) )
Oder unterscheiden sich die Datenbankobjekte da irgendwie?

Verfasst: Montag 7. Mai 2007, 13:24
von BlackJack
Leider ja, es gibt verschiedene Möglichkeiten für den Platzhalter. Im PEP zur DB API 2.0 steht mehr dazu.

Code: Alles auswählen

In [29]: import pysqlite2.dbapi2 as sqlite

In [30]: sqlite.paramstyle
Out[30]: 'qmark'

Verfasst: Montag 7. Mai 2007, 14:08
von sprudel
Unterscheiden sie sich sonst noch irgendwie? Weil so wäre es ja im Prinzip kein allzu großes Problem.

Verfasst: Montag 7. Mai 2007, 14:22
von Leonidas
sprudel hat geschrieben:Unterscheiden sie sich sonst noch irgendwie?
Nuja, im SQL das sie unterstützen unterscheiden sie sich.

Verfasst: Montag 7. Mai 2007, 14:42
von Y0Gi
SQLite hat Probleme mit konkurrierenden Zugriffen, das empfiehlt sich dann wohl weniger.

Wenn du DBMS-unabhängig sein oder keine speziellen Eigenheiten eines DBMS nutzen möchtest, bist du möglicherweise mit Elixir besser beraten, einem objektrelationalen Mapper, der seinerseits auf SQLAlchemy aufsetzt. Damit lässt sich sehr schön und schnell arbeiten.

Verfasst: Montag 7. Mai 2007, 16:07
von sprudel
Im Prinzip will ich nur einzelne Querys machen, sonst nichts.

Das einzige was ich bisher gebraucht habe, ist .execute() .commit() und dann eben den Cursor zum Durchlaufen mit for.

Gibts da nix einfacheres?

Im Prinzip würden mir auch schon 2 Datenbanken reichen: PostgreSQL und Sqlite. Das erste für mehrere gleichzeitige Zugriffe, das 2. für einzige.

Könnte man da nicht im Prinzip eine neue Klasse erschaffen?
Was ist denn der Platzhalter bei Postgre?

Verfasst: Montag 7. Mai 2007, 23:46
von Y0Gi
Elixir ist einfacher. Schau dir mal die Beispiele auf der Site an, die bringen dir hoffentlich einen Einblick.

Bsp.:

Code: Alles auswählen

from elixir import *  # böse!

class Book(Entity):
    has_field('author_name', Unicode(200))
    has_field('title', Unicode(200))
    has_field('year', Integer)

# Anwendung
books = Book.select()
for book in books:
    print '"%s" von %s, erschienen %d' % (
        book.title, book.author_name, book.year)

Verfasst: Dienstag 8. Mai 2007, 07:47
von jens
Ich glaube hier wird ein wenig aneinander vorbei gesprochen, von wegen DB-API <-> ORM ;)

Deswegen hab ich mal einen neuen Wiki Artikel geschrieben: [wiki]DB-API[/wiki]
Wie immer: Bitte erweitern/verbessern...

Verfasst: Dienstag 8. Mai 2007, 10:19
von Y0Gi
Das sehe ich anders. Er will unabhängig vom letztlich verwendeten DBMS eine Datenbank-gestützte Funktionalität implementieren, und zwar gerne einfach. Daher auch meine Frage nach speziellen Anforderungen, die mehr als 08/15-SQL erfordern. Für ein bisschen CRUD ist ein deklarativer Mapper wie eben Elixir nämlich eine sehr feine Sache. Und selbst bei dessen Benutzung kann man zwischendurch immer noch SA direkt nutzen.

Verfasst: Dienstag 8. Mai 2007, 15:03
von cyp++
sprudel hat geschrieben:
BlackJack hat geschrieben:@sprudel: Das ist grundsätzlich so möglich, Du müsstest allerdings korrekt einrücken und die Klammern bei den Bedingungen sind überflüssig.

Ausserdem gilt die Namenskonvention "GROSSE_BUCHSTABEN" sind Konstanten. Das trifft wohl auf beide Namen nicht zu.
Das mit den Buchstaben merk ich mir ;-) Programmier noch nicht allzu lang Python.
Dass Konstanten groß geschrieben werden hat nix mit Python zu tun.

Verfasst: Dienstag 8. Mai 2007, 16:58
von joost
Mal' am Rande: Müssen all diese User wirklich Schreibzugriffe machen ? Sonst ist sqlite allein evt. ausreichend.