Ich habe eine Idee!
Könnte man nicht mit einer Socketverbindung zum MySQL Server die SQL-Strings senden? Oder ist das komplizierter?
MySQLDB Anbindung in Python3
- daemonTutorials
- User
- Beiträge: 171
- Registriert: Sonntag 6. Februar 2011, 12:06
- Kontaktdaten:
LG Maik
Ja, ist es. Was du willst ist ein in purem Python geschriebener MySQL-Client. Keine Ahnung ob es sowas gibt, aber AFAIK nicht.
Der Grund besteht darin, dass das Protokoll, welches MySQL verwendet, proprietaer ist. Wie die anderer Datenbanken auch. Also zB Formate fuer Datentypen, Austausch von Authorisierungsinformationen, Konfiguration der Verbindung usw usf. Kannst ja mal wireshark auf dein lokales Interface loslassen und mitschneiden, was da so an Verkehr auf dem MySQL-Port ankommt.
Und abschliessend noch etwas zum nachdenken: Ohne deinen Einfallsreichtum zu sehr in Frage stellen zu wollen - wenn's wirklich nur eine Socket-Verbindung waere, glaubst du nicht, das haette schonmal wer kurz hinprogrammiert?
Der Grund besteht darin, dass das Protokoll, welches MySQL verwendet, proprietaer ist. Wie die anderer Datenbanken auch. Also zB Formate fuer Datentypen, Austausch von Authorisierungsinformationen, Konfiguration der Verbindung usw usf. Kannst ja mal wireshark auf dein lokales Interface loslassen und mitschneiden, was da so an Verkehr auf dem MySQL-Port ankommt.
Und abschliessend noch etwas zum nachdenken: Ohne deinen Einfallsreichtum zu sehr in Frage stellen zu wollen - wenn's wirklich nur eine Socket-Verbindung waere, glaubst du nicht, das haette schonmal wer kurz hinprogrammiert?
@daemonTutorials: Komplizierter als was? Ein fertiges Modul zu benutzen?
Du kannst nicht einfach SQL 1:1 an einen MySQL-Server schicken. Du musst schon das Protokoll implementieren, was so ein Server erwartet. Und dann ist es wahrscheinlich nicht das effizienteste wirklich alles in SQL abzuwickeln. Zum Beispiel kann es Sinn machen keine Werte in den SQL-Abfragen zu haben, sondern nur Platzhalter. Dann kann das DBMS, sofern es das beherrscht, die SQL-Abfrage einmal kompilieren und optimieren und für verschiedene Werte verwenden.
Letztendlich möchte man ja auch eine DB API 2.0-kompatible Schnittstelle haben und nicht sein eigenes Süppchen kochen.
Du kannst nicht einfach SQL 1:1 an einen MySQL-Server schicken. Du musst schon das Protokoll implementieren, was so ein Server erwartet. Und dann ist es wahrscheinlich nicht das effizienteste wirklich alles in SQL abzuwickeln. Zum Beispiel kann es Sinn machen keine Werte in den SQL-Abfragen zu haben, sondern nur Platzhalter. Dann kann das DBMS, sofern es das beherrscht, die SQL-Abfrage einmal kompilieren und optimieren und für verschiedene Werte verwenden.
Letztendlich möchte man ja auch eine DB API 2.0-kompatible Schnittstelle haben und nicht sein eigenes Süppchen kochen.
- daemonTutorials
- User
- Beiträge: 171
- Registriert: Sonntag 6. Februar 2011, 12:06
- Kontaktdaten:
Interessant. Vielen Dank für die Tipps!
LG Maik
@deets: Das Transport-Protokoll von MySQL ist vollständig dokumentiert, außerdem ist MySQL frei. Es gibt mit MySQL Connector/Python auch eine DBAPI-Schnittstelle für MySQL, die ausschließlich in Python implementiert ist.
@lunar
proprietaer != geschlossen. Ich kannte bis dato nur MySQLdb, und der benutz die C-client-libraries, womit das Protokoll abgehandelt ist. Gut zu wissen, dass es andere Implementationen gibt. Aber die "Idee" des OP, einfach mal nen telnet auf den MySQL-Port zu machen & nen SQL-String abzufeuern ist dann doch was wenig.
proprietaer != geschlossen. Ich kannte bis dato nur MySQLdb, und der benutz die C-client-libraries, womit das Protokoll abgehandelt ist. Gut zu wissen, dass es andere Implementationen gibt. Aber die "Idee" des OP, einfach mal nen telnet auf den MySQL-Port zu machen & nen SQL-String abzufeuern ist dann doch was wenig.
@deets: So? Dann kläre mich doch bitte auf über die Bedeutung des Worts „proprietär“, und dessen Bedeutung und Sinn in Deinem Beitrag ...
http://de.wikipedia.org/wiki/Propriet%C3%A4r
Und ich denke, aus dem Kontext geht klar hervor, dass ich genau das meinte, was in 3. beschrieben ist. Mir ist die GPL-Lizenz von MySQL durchaus bekannt....
Aber gerne nochmal: mir ging es darum darzulegen, dass es nicht reicht, einen socket aufzumachen, und "select * from tabelle" reinzuschreiben. Aber das habe ich doch eigentlich recht klar gesagt, oder?
Und ich denke, aus dem Kontext geht klar hervor, dass ich genau das meinte, was in 3. beschrieben ist. Mir ist die GPL-Lizenz von MySQL durchaus bekannt....
Aber gerne nochmal: mir ging es darum darzulegen, dass es nicht reicht, einen socket aufzumachen, und "select * from tabelle" reinzuschreiben. Aber das habe ich doch eigentlich recht klar gesagt, oder?
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
"Datenbankspezifisch" ist in diesem Zusammenhang wohl wirklich besser (und "richtiger") als "proprietär".
Gruß, noisefloor
"Datenbankspezifisch" ist in diesem Zusammenhang wohl wirklich besser (und "richtiger") als "proprietär".

Gruß, noisefloor