Benutzung der PostgreSQL Zugriffsbibliothek

28 Okt 2011 - 14:48

Eine Übersicht, die reichen sollte, wenn Sie die Grundideen gelesen haben.

To English Page

Laden der Bibliothek

Laden der Bibliothek ist konstanter Code in Ihren AppleScripts:

property app_support : (path to application support) as text
property lib_path : app_support & "js_aux_scripts:pgsql_objects_pdo_devel.scptd"
set lib to load script file lib_path

Dies legt die Bibliothek in der Variable »lib« ab.

Erzeugen eines Datenbank-Konnektors

Die Bibliothek hat einen Handler names »new_link«. Er wird mit vier Argumenten aufgerufen:

new_link(url_des_datenbank_servers, logon_name, logon_kennwort, name_der_datenbank)

Beispiel:

set dbh to new_link("localhost", "postgres", "SeCrEt", "planets_sample") of lib

Einen Konnektor anlegen verbindet nicht mit der Datenbank. Dies geschieht erst, wenn das Script benutzt wird.

do_select: Eine SELECT-Anweisung ausführen

Das Konnektor-Script hat den Handler »do_select«. Er dient für alle SQL-Anweisungen, die eine Ergebnismenge liefern. Er nimmt zwei Argumente:

  • Eine SQL SELECT-Anweisung, in der alle variablen Teile durch Fragezeichen als Platzhalter ersetzt sind
  • Eine Liste von Werten, die die Platzhalter ersetzen

Beispiel:

tell dbh to do_select("SELECT id, name_en, name_fr, name_jp, name_de, diameter FROM planets WHERE LOWER(name_en) LIKE LOWER(?) OR LOWER(name_en) LIKE LOWER(?)", {"Nep%", "Ven%"})

Dies liefert einen AppleScript-Record wie:

{cols:6, rows:2, error_message:"", error_code:0, table:{{"2", "Venus", "Vénus", "金星", "Venus", "12104"}, {"17", "Neptune", "Neptune", "海王星", "Neptun", "49528"}}}

Das heißt: 6 Spalten (oder Felder), 2 Zeilen (oder Datensätze), kein Fehler, und in »table» eine Liste von Listen mit den gelieferten Datensätzen.

do_query: Ein UPDATE ausführen

Der Handler »do_query« sendet eine Anweisung an den Server, erwartet aber keine Ergebnismenge als Antwort.

Beispiel:

tell dbh to do_query("UPDATE planets SET name_jp = ? WHERE LOWER(name_en) LIKE LOWER(?)", {"水星", "mer%"})

Dies ist ein Update jedes Records, der das Suchkriterium erfüllt.

Das Ergebnis ist ein Record wie:

{error_code:0, error_message:"", insert_id:0, affected_rows:1}

set_sequence: Eine Insert-ID bekommen

Oft braucht man die Insert-ID nach einem INSERT. Postgres verlangt dafür den Namen des Objekts, das das sequentielle Zählen erledigt.

Beispiel:

set_sequence("planets_id_seq") of dbh
tell dbh to do_query("INSERT INTO planets (name_en, name_fr, name_de, diameter, mass, density) VALUES (?, ?, ?, ?, ?, ?)", {"Neptune", "Neptune", "Neptun", "49528", "1.0243e+26", "1.638"})

Der von do_query gelieferte Record sieht etwa so aus:

{error_code:0, error_message:"", insert_id:18, affected_rows:1}

Benutzen Sie Ihr Datenbank-Administrationswerkzeug, den Namen zu finden. Voreingestellt benutzt PostgreSQL: Tabellenname-Spaltenname_seq.

Wird die Sequenz nicht mehr gebraucht, es sollen aber weitere SQL-Anweisungen ausgeführt werden, sollte sie zu leer zurückgesetzt werden:

set_sequence("") of dbh

Properties / Eigenschaften

raise_errors

Ist dies false (Voreinstellung), führt ein Fehler bei der SQL-Anweisung nicht zu einem AppleScript-Fehler. Statt dessen erscheint er im Ergebnis-Record. Ist die Property wahr, erfolgt in solchen Fällen ein AppleScript-Fehler.

main_version und sub_version

Die Version der Bibliothek, falls im Code gebraucht. Für eine Version 1.2 sind die Werte 1 und 2.

Alle Handler im Script »helper« sollten als privat betrachtet werden. Verlassen Sie sich nicht auf ihr Verhalten.