Seite 1 von 1

Gibt es eine MySQL "API"?

Verfasst: Donnerstag 18. November 2010, 18:11
von microkernel
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

Re: Gibt es eine MySQL "API"?

Verfasst: Donnerstag 18. November 2010, 18:38
von /me
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.

Re: Gibt es eine MySQL "API"?

Verfasst: Donnerstag 18. November 2010, 20:53
von 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.

Re: Gibt es eine MySQL "API"?

Verfasst: Donnerstag 18. November 2010, 21:28
von noisefloor
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

Re: Gibt es eine MySQL "API"?

Verfasst: Freitag 19. November 2010, 08:58
von /me
noisefloor hat geschrieben:BTW, wie soll sowas denn aussehen (also die Syntax einer Abfrage)?
Managementtaugliche DWIM-Technologie.

DWIM = Do What I Mean

Re: Gibt es eine MySQL "API"?

Verfasst: Samstag 27. November 2010, 17:12
von microkernel
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?)

Re: Gibt es eine MySQL "API"?

Verfasst: Samstag 27. November 2010, 20:54
von noisefloor
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

Re: Gibt es eine MySQL "API"?

Verfasst: Samstag 27. November 2010, 21:19
von 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.

Re: Gibt es eine MySQL "API"?

Verfasst: Sonntag 28. November 2010, 18:27
von microkernel
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.