Gibt es eine MySQL "API"?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

Hallo,

ich arbeite gerade an ein Modul was den Umgang mit einen MySQL Server vereinfachen soll (sprich: das man kein SQL mehr können muss um aktionen durchzuführen).
Nun lautet meine Frage ob es so etwas in einer ähnlichen Form eigentlich schon gibt?

Liebe Grüße
microkernel
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

microkernel hat geschrieben:ich arbeite gerade an ein Modul was den Umgang mit einen MySQL Server vereinfachen soll (sprich: das man kein SQL mehr können muss um aktionen durchzuführen).
Nun lautet meine Frage ob es so etwas in einer ähnlichen Form eigentlich schon gibt?
Objektrelationale Mapper wie sqlachemy existieren.
lunar

Eine objektrelationale Schicht ist allerdings kein Ersatz für fehlende SQL-Kenntnisse. Zur Arbeit mit Datenbanken sollte man SQL schon beherrschen, und sei es auch nur ganz rudimentär.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Nun lautet meine Frage ob es so etwas in einer ähnlichen Form eigentlich schon gibt?
Was letztendlich auch egal wäre, wenn deine Lösung besser wäre. ;-)

BTW, wie soll sowas denn aussehen (also die Syntax einer Abfrage)?

Gruß, noisefloor
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

noisefloor hat geschrieben:BTW, wie soll sowas denn aussehen (also die Syntax einer Abfrage)?
Managementtaugliche DWIM-Technologie.

DWIM = Do What I Mean
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

noisefloor hat geschrieben:BTW, wie soll sowas denn aussehen (also die Syntax einer Abfrage)?
Ich habe das mittlerweile in etwa so aufgebaut:

Code: Alles auswählen

server = Server("localhost", "root", "password")
database = server["datenbank"]
table = database["table"]

# bei der abfrage der datensätze bin ich mir noch
# nicht ganz sicher wie ich das umsetzen will

# Variante 1 (ohne and und or)
table.get(fields=("col1", "col2"), where={"col1" : "x", "col2" : "x2"}, limit="20")

# Variante 2
@table.get(fields=("col1", "col2"), limit="20")
def select(row):
    if row["col1"] == "x" and/or row["col2"] == "x2":
        return True
    else:
        return False
(Was haltet ihr für besser bzw. wie würdet ihr die funktion aufbauen?)
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

Danke für deinen Entwurf.

IMHO ist das aber nicht wirklich einfacher als SQL. Wenn man den Umgang mit deiner API beherrscht sollte man auch in Lage sein, einen regulären SQL-Query zu Formulieren. Die Syntax ist ja relativ nah...

Vielleicht sehe ich das auch falsch, weil ich keine Probleme mit SQL habe (zumindest nicht mit den "Feld-Wald-und-Wiesen Queries" ;-)

Gruß, noisefloor
BlackJack

@microkernel: Bevor Du daran weiter arbeitest, solltest Du mal schauen was schon auf dem Markt ist. Deines müsste ja irgendeinen Vorteil bieten um sinnvoll zu sein.

SQLAlchemy bietet neben dem ORM ja zum Beispiel auch Klassen und Funktionen um Abfragen zu formulieren. Komplett ungetestet:

Code: Alles auswählen

engine = create_engine('mysql://user@host...')
connection = engine.connect()
metadata = MetaData()
metadata.bind = connection
table = Table('table', metadata, auto_load=True)

foo_select = table.select(
    [table.c.col1, table.c.col2],
    and_(table.c.col1 == 'x', table.c.col2 == 'x2')
).limit(20)

for row in foo_select.execute():
    print row
Vorteil: Das funktioniert nicht nur mit MySQL sondern auch mit allen anderen Datenbanken die SQLAlchemy unterstützt.
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

BlackJack hat geschrieben:@microkernel: Bevor Du daran weiter arbeitest, solltest Du mal schauen was schon auf dem Markt ist. Deines müsste ja irgendeinen Vorteil bieten um sinnvoll zu sein.

SQLAlchemy bietet neben dem ORM ja zum Beispiel auch Klassen und Funktionen um Abfragen zu formulieren. Komplett ungetestet:

Code: Alles auswählen

engine = create_engine('mysql://user@host...')
connection = engine.connect()
metadata = MetaData()
metadata.bind = connection
table = Table('table', metadata, auto_load=True)

foo_select = table.select(
    [table.c.col1, table.c.col2],
    and_(table.c.col1 == 'x', table.c.col2 == 'x2')
).limit(20)

for row in foo_select.execute():
    print row
Vorteil: Das funktioniert nicht nur mit MySQL sondern auch mit allen anderen Datenbanken die SQLAlchemy unterstützt.
Vielen Dank für deinen Tipp. Ich werd mir noch einmal ein paar Gedanken darüber machen. Allerdings hatte ich nicht direkt die Absicht das Module später irgendwo zu publizieren.
Antworten