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 12/2017: Perfekte Videos

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

Broadcom Adapter 802.11n nachinstallieren
Thomas Mengel, 31.10.2017 20:06, 2 Antworten
Hallo, kann man nachträglich auf einer Liveversion, MX Linux auf einem USB-Stick, nachträglich...
RUN fsck Manually / Stromausfall
Arno Krug, 29.10.2017 12:51, 1 Antworten
Hallo, nach Absturz des Rechners aufgrund fehlendem Stroms startet Linux nicht mehr wie gewohn...
source.list öffnet sich nicht
sebastian reimann, 27.10.2017 09:32, 2 Antworten
hallo Zusammen Ich habe das problem Das ich meine source.list nicht öffnen kann weiß vlt jemman...
Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 6 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...