Datenbankzugriff

In Listing 2 erfolgt der Zugriff auf eine CSV-Datei. Nach dem Laden des Moduls csv (Zeile 1) liest das Skript die Daten in Zeile 4 aus der angegebenen Datei personen.csv. Als Trennzeichen kommt ein Komma zum Einsatz; der Parameter delimiter bietet die Möglichkeit, das anzupassen: Alternativ lassen sich auch Strichpunkte oder Leerzeichen als Trenner zwischen den Feldern verwenden. Als Zeichen zum Einfassen von Textketten, die Steuerzeichen enthalten (etwa ein Komma oder Semikolon), dient das doppelte Anführungszeichen, was die Option quotechar definiert.

Der Zugriff auf ein DBS erfolgt stets in ähnlicher Weise: Das entsprechende Modul baut zunächst eine Verbindung zur Datenbank auf. Dann übermittelt es an den Rechner (host) den Namen der Datenbank, die Benutzerkennung (user) sowie das passende Passwort. Als Ergebnis liefert es ein Objekt, das entsprechende Methoden für die Transaktionen mitbringt. Den Zugriff auf PostgreSQL zeigen die beiden Kästen "PostgreSQL/Python" und "PostgreSQL/Perl".

PostgreSQL/Python

Für die Kombination PostgreSQL/Python steht das Modul pg8000 [10] bereit. Listing 3 zeigt den Zugriff auf die Daten. Nach dem Import der Klasse DBAPI (Zeile 1) stellt die Funktion DBAPI.connect() die Verbindung zum Rechner server her (Zeile 2). Dabei liefert sie ein Objekt zurück, das einen cursor() mitbringt. Damit positionieren Sie den Zeiger auf den richtigen Datensatz (Zeile 3).

Das Select-Kommando liest die Werte teilnehmer, rolle und Projektname aus der Tabelle personenliste. Die Zeilen 5 bis 7 zeigen schematisch eine Möglichkeit auf, die Werte zu verarbeiten. Die Zeilen 8 und 9 schließen die Verbindung zu PostgreSQL wieder.

Listing 3

from pg8000 import DBAPI
connectionId = DBAPI.connect(host="server", database="veranstaltung", user="tom", password="jerry")
cursor = connectionId.cursor()
cursor.execute("SELECT teilnehmer, rolle, projektname FROM personenliste")
for datensatz in cursor:
  teilnehmer, rolle, projektname = datensatz
  ...
cursor.close()
connectionId.close()

PostgreSQL/Perl

Während es für Python pro DBS ein eigenes Modul gibt, verfolgt Perl ein etwas anderes Konzept: Hinter dem Perl Database Interface, kurz: Perl-DBI, verbirgt sich eine einheitliche Schnittstelle, über die Sie auf alle DBS in der selben Art und Weise zugreifen. Die Auswahl erfolgt über entsprechende Treiber. So nutzen Sie dbi:Pg für PostgreSQL. Listing 4 demonstriert den Einsatz.

Zeile 2 lädt das Perl-DBI-Modul. Die Zeilen 4 bis 6 definieren den Treiber, den Benutzernamen und das zugehörige Passwort. Nun baut Zeile 8 eine Verbindung auf. Zeile 9 bereitet die Transaktion vor, die dann Zeile 10 stattfindet. Die Zeilen 11 bis 13 lesen zeilenweise das Ergebnis der Transaktion aus. Am Ende trennt das Skript die Verbindung zum DBS wieder (Zeile 14) und beendet sich (Zeile 15).

Listing 4

#!/usr/bin/perl -w
use DBI;
$driver = "dbi:Pg:veranstaltung";
$user = "tom"
$password = "jerry"
my $connectionId = DBI->connect($driver, $user, $password);
my $transaction = $connectionId->prepare("SELECT teilnehmer, rolle, projektname FROM personenliste");
$transaction->execute()
while (($teilnehmer, $rolle, $projektname) = $transaction->fetchrow_array){
  ...
}
$connectionId->disconnect;
exit;

LaTeX-Code erzeugen

In Listing 2 kamen die Funktionen erzeugeHeader(), seitenumbruch(), erzeugeNamensschild() und erzeugeFooter() zum Einsatz. Die Funktion erzeugeHeader() (Listing 5) ist für die Präambel des LaTeX-Dokuments zuständig. Im Programmcode fallen die doppelten Schrägstriche links am Anfang der Zeilen auf: LaTeX-Kommandos beginnen ja mit einem einfachen Schrägstrich links. Da der Python-Interpreter aber Zeichenfolgen, die mit einem solchen Zeichen beginnen, als Steuerzeichen interpretiert, müssen Sie diese für die Ausgabe durch einen weiteren Schrägstrich schützen ("escapen").

Zeile 4 legt mithilfe des Pakets geometry das Papierformat auf DIN*A6 quer fest. Zeile 10 definiert zusätzlich die Außen- und Innenmaße der Seite. In Zeile 11 kommt das Paket crop [11] hinzu, welches die entsprechenden Schnittmarken generiert. Die vier Optionen sorgen für Schnittmarken an jeder Ecke (cam), ausgerichtet auf das Format DIN A6 (a6), mittig (center) und im Querformat (landscape). Zeile 12 markiert den Beginn des Dokuments.

Die Funktionen seitenumbruch() und erzeugeFooter() fallen vergleichsweise kurz aus und erzeugen lediglich einen Seitenumbruch beziehungsweise bezeichnen das Ende des Inhalts des Dokuments (Listing 6).

Listing 5

def erzeugeHeader():
  print("""
  \\documentclass{article}
  \\usepackage[paper=a6paper,landscape,dvips=false,pdftex=false,vtex=false]{geometry}
  \\usepackage[pdftex]{graphicx}
  \\usepackage[pdftex]{color}
  \\usepackage{palatino}
  \\usepackage[T1]{fontenc}
  \\usepackage[utf8]{inputenc}
  \\geometry{paperwidth=95mm, paperheight=66mm, margin=1mm, bottom=1mm, nohead}
  \\usepackage[cam,a6,center,landscape]{crop}
  \\begin{document}
  """)

Listing 6

def seitenumbruch():
  print("\\newpage")
def erzeugeFooter():
  print("\\end{document}")

Etwas umfangreicher fällt die Funktion aus, mit deren Hilfe das Namensschild entsteht (Listing 7). Sie definiert zunächst eine minimierte Seite (Zeile 4), in die sie nacheinander den Namen der Veranstaltung (Zeile 6), den des Teilnehmers, dessen Rolle, das Projekt (Zeilen 9 bis 11) sowie eine Grafik anordnet (Abbildung 2).

Listing 7

def erzeugeNamensschild(teilnehmer, rolle, projektname):
  print("""
    \\hspace{-2mm}
    \\begin{minipage}[t]{92mm}
    ~ \\\\
    \\small{9. Brandenburger Linux-Infotag 2012 -- Potsdam}\\\\
    \\huge{\\textsf{%
  """)
  print("\\textbf{~" + teilnehmer + "}\\\\")
  print(rolle + "\\\\")
  print(projektname + "\\\\")
  print("""
    }}~ \\\\
    \\includegraphics[width=75mm]{footer.png}
    \\end{minipage}
  """)

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • LaTeX mit Daten aus externen Quellen anreichern
    Ob Serienbrief oder Teilnehmerliste – mit dem richtigen Adapter befüllen Sie LaTeX-Dokumente problemlos mit den Feldinhalten einer Datenbank und erstellen so Druckerzeugnisse in perfekter Qualität.
  • Gnome-Tipps
    Gnome ist neben KDE die zweite große Desktopumgebung für Linux. In den Gnome-Tipps stellen wir regelmäßig Nützliches und Praktisches für die alternative grafische Oberfläche vor.
  • Programm für die dritte Ubucon in Göttingen steht
    Auch dieses Jahr organisiert der Ubuntu-Deutschland e.V. in Göttingen eine große Konferenz. Das Programm für die Veranstaltung steht nun online, ein paar Blitzvorträge sind noch zu vergeben.
  • Latex-Editor mit Tabs und Folding

    Texmaker, ein Editor für den Textsatz mit Latex, ist in Version 2.3 mit neuen Features erhältlich.
  • Tafelfertig
    Die LaTeX-Grundausstattung erlaubt nur das Setzen recht schlichter Tabellen. Mit einigen Zusatzpaketen bohren Sie die Funktionen für professionell gestaltete Tabellen kräftig auf.
Kommentare

Infos zur Publikation

LU 02/2018: PAKETE VERWALTEN

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

JQuery-Script läuft nicht mit Linux-Browsern
Stefan Jahn, 16.02.2018 12:49, 2 Antworten
Hallo zusammen, ...folgender goldener Code (ein jQuery-Script als Ergebnis verschiedener Exper...
XSane-Fotokopie druckt nicht mehr
Wimpy *, 30.01.2018 13:29, 0 Antworten
openSuse 42.3 KDE 5.8.7 Seit einem Software-Update druckt XSane keine Fotokopie mehr aus. Fehler...
TOR-Browser stürzt wegen Wikipedia ab
Wimpy *, 27.01.2018 14:57, 0 Antworten
Tor-Browser 7.5 based on Mozilla Firefox 52.8.0 64-Bit. Bei Aufruf von http: oder https://de.wi...
Wifikarte verhindert Bootvorgang
Maik Kühn, 21.01.2018 22:23, 1 Antworten
iwlwifi-7265D -26 failed to load iwlwifi-7265D -25 failed to load iwlwifi-7265D -24 failed to l...
sharklinux
Gerd-Peter Behrendt, 18.01.2018 23:58, 2 Antworten
Hallo zusammen, ich habe sharklinux von der DVD Installiert. 2x, jedesmal nach dem Reboot ist di...