PL/Python

Aus MARJORIE-WIKI
Wechseln zu: Navigation, Suche
PL/Python
Postgresql.png

Python als prozedurale Erweiterung von PostgreSQL
Basisdaten
Paradigmen: Multiparadigma
Entwickler: PostgreSQL-Team
Aktuelle Version: 9.0.5 / 9.1.1  (26. September 2011)
Typisierung: stark, dynamisch („Duck-Typing“)
Betriebssystem:
Lizenz: PostgreSQL Lizenz[1]
postgresql.org

PL/Python (Python Procedural Language) ist eine prozedurale Sprache der objektrelationalen Datenbank PostgreSQL.

Allgemein[Bearbeiten]

PL/Python ermöglicht das Erstellen von Funktionen in PostgreSQL mit der Programmiersprache Python. PostgreSQL unterstützt dabei sowohl Python 2 und Python 3. Beide Versionen können parallel installiert werden.

Mit PL/Python kann in Python geschriebener Programm-Code direkt vom Datenbankserver ausgeführt werden. Auf diese Weise kann die Gefahr von SQL-Injektionen deutlich reduziert werden, die Performance durch Vermeidung von unnötiger Netzwerkbelastung verbessert werden, und die Anwendungslogik schon in der Datenbank umgesezt werden.

Beispiele[Bearbeiten]

Beispiele Typenübergabe[Bearbeiten]

-- eine Tabelle Mitarbeiter wird angelegt.
CREATE TABLE mitarbeiter (
  name text,
  umsatz integer,
  alter integer
);

CREATE FUNCTION bonus (m mitarbeiter) -- "mitarbeiter" wird an die Funktion überbeben
  RETURNS boolean AS   
-- $$Literal schließt die Prozedur ein
 
$body$ 
  if m["umsatz"] > 200000:
    return True
  if (m["alter"] < 30) and (m["umsatz"] > 100000):
    return True
  return False
$body$ 
LANGUAGE plpython2u;

Beispiel Google Übersetzer[Bearbeiten]

Dieses Beispiel stammt von Googles Projekt py-gtranslate[2] Es wird eine Anfrage an den Google-Übersetzungsdienst gestellt, und die Funktion liefert den übersetzten Text zurück.

CREATE OR REPLACE FUNCTION gtranslate(src text, target text, phrase text) RETURNS text
LANGUAGE plpython2u AS
$body$
import re
import urllib
import simplejson as json
 
class UrlOpener(urllib.FancyURLopener):
  version = "py-gtranslate/1.0"
base_uri = 'http://ajax.googleapis.com/ajax/services/language/translate'
# Dieses Service von Google wird am 1. Dez. 2011 abgeschaltet,
# seit 26.Mai ist nur noch es eingeschränkt verfügbar
default_params = {'v': '1.0'}
def translate(src, to, phrase):
   args = default_params.copy()
   args.update({
            'langpair': '%s%%7C%s' % (src, to),
            'q': urllib.quote_plus(phrase),
   })
   argstring = '%s' % ('&'.join(['%s=%s' % (k,v) for (k,v) in args.iteritems()]))
   resp = json.load(UrlOpener().open('%s?%s' % (base_uri, argstring)))
   try:
           return resp['responseData']['translatedText']
   except:
           # should probably warn about failed translation  
           return phrase
return translate(src, target, phrase)
$body$;
select gtranslate('en','de','Welcome to Wikipedia');
-- "Willkommen bei Wikipedia"

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. Hochspringen PostgreSQL: License. Abgerufen am 1. Oktober 2011 (englisch).
  2. Hochspringen py-gtranslate. Abgerufen am 1. Oktober 2011 (englisch).
Info Sign.svg Dieser Wikipedia-Artikel wurde, gemäß GFDL, CC-by-sa mit der kompletten History importiert.