PL/Python
PL/Python | |
---|---|
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.
Inhaltsverzeichnis
[Verbergen]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]
- plpython.html Dokumentation (englisch)
- Spickzettel zu PL/Python (pdf auf http://www.postgresonline.com)
- www.postgresonline.com Quick Intro to PLPython (englisch) zuletzt besucht am 24. September 2011
Einzelnachweise[Bearbeiten]
- Hochspringen ↑ PostgreSQL: License. Abgerufen am 1. Oktober 2011 (englisch).
- Hochspringen ↑ py-gtranslate. Abgerufen am 1. Oktober 2011 (englisch).