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 01/2018: FLINKE BROWSER

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

Suchprogramm
Heiko Taeuber, 17.01.2018 21:12, 1 Antworten
Hallo liebe Community, keine Ahnung ob dieses Thema hier schon einmal gepostet wurde. Ich hab...
Linux Mint als Zweitsystem
Wolfgang Robert Luhn, 13.01.2018 19:28, 4 Antworten
Wer kann mir helfen??? Habe einen neuen Laptop mit vorinstaliertem Windows 10 gekauft. Möchte g...
externe soundkarte Kaufempfehlung
lara grafstr , 13.01.2018 10:20, 3 Antworten
Hallo Ich bin auf Suche nach einer externen soundkarte.. Max 150 Euro Die Wiedergabe is...
Prozessor-Sicherheitslücke Meltdown und Spectre
Wimpy *, 06.01.2018 10:45, 2 Antworten
Ich habe heute ein Sicherheitsupdate "ucode-intel" für openSuse 42.3 erhalten. Ist damit das Prob...
LENOVO ideapad320 Touchpad Linux Mint 18
Peter Deppen, 23.12.2017 16:49, 3 Antworten
Hallo, bin Linux Anfänger und habe das Problem, dass das Touchpad auf dem LENOVO ideapad320 mit L...