Announcement

Collapse
No announcement yet.

Mit Python via JDBC auf MySQL zugreifen!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mit Python via JDBC auf MySQL zugreifen!

    Ein spannendes Thema, das leider zu wenig wahrgenommen wird und Praxisbeispiele sieht man eh selten. Das soll sich ändern. Ja, es ist wirklich kein Problem, Python-Klassen von Java-Klassen erben zu lassen und somit ist der Zugriff auf das mächtige Java Datenbank-API auch für Python-Entwickler leicht zu bewerkstelligen. Falls man das möchte;-).

    Folgendes Szenario: Sie müssen/wollen/sollen aus einem Python-Script via <i>JDBC</i> auf eine Datenbank (in unserem Fall <i>MysQL</i>;-)) zugreifen.
    Allerdings müssen ein paar Vorraussetzungen erfüllt sein, um das Ganze durchführen zu können. Die Programmiersprache Java muß installiert sein - möglichst die letzte stabile Version (derzeit <i>j2sdk1.4.1</i>). Ob das tatsächlich so ist, läßt sich mit dem Aufruf <i>type java</i> schnell in Erfahrung bringen. Die Ausgabe sollte so aussehen:
    <PRE>
    java is hashed (/home/merman/j2sdk1.4.1_01/bin/java)
    </PRE>
    Ist Java nicht installiert, müssen Sie es sich von der Sun-Website [1] besorgen oder auf eine Heft-CD (zum Beispiel aus dem Java-Magazin) bzw. eine Buch-CD zurückgreifen und es selbst installieren.
    Unter Linux wird die Sprache in der Regel bei einer Standard-Installation mit auf die Platte des Anwenders geschaufelt. Soweit so gut.

    Um <i>MySQL</i>-basierte Programme mit Java schreiben zu können, benötigen Sie zusätzlich einen <i>MySQL</i>-spezifischen Treiber. Sehr beliebt und weit verbreitet ist <i>Connector/J</i> [2] - diesen Treiber hat auch der Autor benutzt. Besorgen Sie sich den passenden Treiber und folgen Sie der Installations-Anleitung.

    Weiterhin benötigen Sie die aktuelle Jython-Version. Diese finden Sie wiederum unter [3]. Die letzte "stable version" trägt die Versionsnummer 2.1 - die Datei kann man kostenlos downloaden (ca. 2,1 MB groß).

    Die Jython-Installation ist kinderleicht, folgen Sie einfach den Anweisungen im README (beziehungsweise der INSTALL-Datei).
    Aber was zum Teufel ist Jython eigentlich? Die Antwort lautet: Jython ist, im Gegensatz zu CPython (dem klassischen Python), einfach in Java implementiert worden, weiter nix. Doch, es ist langsamer;-). Somit stehen dem Python-Entwickler eigentlich zwei Sprachen zur Verfügung: Python und Java!

    Ach ja, <i>MySQL</i> muß ebenfalls installiert sein - testen Sie das mit dem gleichen Aufruf, mit dem Sie nach Java gesucht haben. Das ist alles an Vorbereitungen.

    Zur Praxis. Zuerst wird eine Java-Klasse geschrieben. Sie stellt die Verbindung zur Datenbank her. Diese Klasse enthält insgesamt nur zwei Methoden (eine Verbindungsmethode und eine Testmethode).

    Anschließend muß noch eine Jython-Klasse implementiert werden. Diese Klasse erbt von der Java-Klasse, überschreibt die Testmethode der Superklasse und setzt schlußendlich die Anfrage an den Datenbank-Server ab. Fertig. Fangen wir mit Java-Klasse an.
    <PRE>
    import java.sql.*;
    import java.util.*;
    public class MySQLClient {

    Connection conn = null;

    // Standard-CTOR
    public MySQLClient () {}

    public Connection connect(String url, String user, String pwd) throws SQLException {

    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance ();
    conn = DriverManager.getConnection(url, user, pwd);
    System.out.println("\nConnected!");

    } catch (Exception ex) {
    ex.printStackTrace();
    }

    return conn;
    }

    public ArrayList dbCheck() throws SQLException {

    ArrayList dbData = new ArrayList();
    // Verbindungsparameter durch eigene Angaben ersetzen: host, database, username, password
    conn = this.connect("jdbc:mysql://host/database", "username", "password");
    DatabaseMetaData meta = conn.getMetaData();

    System.out.print("\n ... PRODUCT: " + meta.getDatabaseProductName());
    System.out.print("\n ... VERSION: " + meta.getDatabaseProductVersion());
    System.out.print("\n ... DRIVER : " + meta.getDriverName());
    System.out.print("\n ... DB-URL : " + meta.getURL());
    System.out.print("\n ... USER :

  • #2
    Ein spannendes Thema, das leider zu wenig wahrgenommen wird und Praxisbeispiele sieht man eh selten. Das soll sich ändern. Ja, es ist wirklich kein Problem, Python-Klassen von Java-Klassen erben zu lassen und somit ist der Zugriff auf das mächtige Java Datenbank-API auch für Python-Entwickler leicht zu bewerkstelligen. Falls man das möchte;-).

    Folgendes Szenario: Sie müssen/wollen/sollen aus einem Python-Script via <i>JDBC</i> auf eine Datenbank (in unserem Fall <i>MysQL</i>;-)) zugreifen.
    Allerdings müssen ein paar Vorraussetzungen erfüllt sein, um das Ganze durchführen zu können. Die Programmiersprache Java muß installiert sein - möglichst die letzte stabile Version (derzeit <i>j2sdk1.4.1</i>). Ob das tatsächlich so ist, läßt sich mit dem Aufruf <i>type java</i> schnell in Erfahrung bringen. Die Ausgabe sollte so aussehen:
    <PRE>
    java is hashed (/home/merman/j2sdk1.4.1_01/bin/java)
    </PRE>
    Ist Java nicht installiert, müssen Sie es sich von der Sun-Website [1] besorgen oder auf eine Heft-CD (zum Beispiel aus dem Java-Magazin) bzw. eine Buch-CD zurückgreifen und es selbst installieren.
    Unter Linux wird die Sprache in der Regel bei einer Standard-Installation mit auf die Platte des Anwenders geschaufelt. Soweit so gut.

    Um <i>MySQL</i>-basierte Programme mit Java schreiben zu können, benötigen Sie zusätzlich einen <i>MySQL</i>-spezifischen Treiber. Sehr beliebt und weit verbreitet ist <i>Connector/J</i> [2] - diesen Treiber hat auch der Autor benutzt. Besorgen Sie sich den passenden Treiber und folgen Sie der Installations-Anleitung.

    Weiterhin benötigen Sie die aktuelle Jython-Version. Diese finden Sie wiederum unter [3]. Die letzte "stable version" trägt die Versionsnummer 2.1 - die Datei kann man kostenlos downloaden (ca. 2,1 MB groß).

    Die Jython-Installation ist kinderleicht, folgen Sie einfach den Anweisungen im README (beziehungsweise der INSTALL-Datei).
    Aber was zum Teufel ist Jython eigentlich? Die Antwort lautet: Jython ist, im Gegensatz zu CPython (dem klassischen Python), einfach in Java implementiert worden, weiter nix. Doch, es ist langsamer;-). Somit stehen dem Python-Entwickler eigentlich zwei Sprachen zur Verfügung: Python und Java!

    Ach ja, <i>MySQL</i> muß ebenfalls installiert sein - testen Sie das mit dem gleichen Aufruf, mit dem Sie nach Java gesucht haben. Das ist alles an Vorbereitungen.

    Zur Praxis. Zuerst wird eine Java-Klasse geschrieben. Sie stellt die Verbindung zur Datenbank her. Diese Klasse enthält insgesamt nur zwei Methoden (eine Verbindungsmethode und eine Testmethode).

    Anschließend muß noch eine Jython-Klasse implementiert werden. Diese Klasse erbt von der Java-Klasse, überschreibt die Testmethode der Superklasse und setzt schlußendlich die Anfrage an den Datenbank-Server ab. Fertig. Fangen wir mit Java-Klasse an.
    <PRE>
    import java.sql.*;
    import java.util.*;
    public class MySQLClient {

    Connection conn = null;

    // Standard-CTOR
    public MySQLClient () {}

    public Connection connect(String url, String user, String pwd) throws SQLException {

    try {
    Class.forName("com.mysql.jdbc.Driver").newInstance ();
    conn = DriverManager.getConnection(url, user, pwd);
    System.out.println("\nConnected!");

    } catch (Exception ex) {
    ex.printStackTrace();
    }

    return conn;
    }

    public ArrayList dbCheck() throws SQLException {

    ArrayList dbData = new ArrayList();
    // Verbindungsparameter durch eigene Angaben ersetzen: host, database, username, password
    conn = this.connect("jdbc:mysql://host/database", "username", "password");
    DatabaseMetaData meta = conn.getMetaData();

    System.out.print("\n ... PRODUCT: " + meta.getDatabaseProductName());
    System.out.print("\n ... VERSION: " + meta.getDatabaseProductVersion());
    System.out.print("\n ... DRIVER : " + meta.getDriverName());
    System.out.print("\n ... DB-URL : " + meta.getURL());
    System.out.print("\n ... USER

    Comment

    Working...
    X