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
Gibt es eine MySQL "API"?
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
Objektrelationale Mapper wie sqlachemy existieren.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?
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.
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,

BTW, wie soll sowas denn aussehen (also die Syntax einer Abfrage)?
Gruß, noisefloor
Was letztendlich auch egal wäre, wenn deine Lösung besser wäre.Nun lautet meine Frage ob es so etwas in einer ähnlichen Form eigentlich schon gibt?

BTW, wie soll sowas denn aussehen (also die Syntax einer Abfrage)?
Gruß, noisefloor
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
Ich habe das mittlerweile in etwa so aufgebaut:noisefloor hat geschrieben:BTW, wie soll sowas denn aussehen (also die Syntax einer Abfrage)?
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
- noisefloor
- User
- Beiträge: 4149
- 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
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
@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:
Vorteil: Das funktioniert nicht nur mit MySQL sondern auch mit allen anderen Datenbanken die SQLAlchemy unterstützt.
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
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
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.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:
Vorteil: Das funktioniert nicht nur mit MySQL sondern auch mit allen anderen Datenbanken die SQLAlchemy unterstützt.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