Benutzer-Werkzeuge

Webseiten-Werkzeuge


python:psycopg

Dies ist eine alte Version des Dokuments!


  • Postgres-Datenbank-Treiber für Python

Server-side binding

  • Technik bei der das SQL-Statement und die Werte getrennt an die Datenbank gesendet werden
  • Ziel ist u.a. die Vermeidung von sql-Injection durch Trennung von Statement und Werten
    • die Datenbank wertet Werte nicht aus → dadurch können sie keine Statements enthalten
  • ist auf Statement limitiert
    • ein execute()-Call kann nur ein Statement enthalten das Server-side-binding macht

conn.execute(insert into whatever values(%s); select * from somethingelse where id = %s, ("firstvalue", "secondvalue"))

  • obiges funktioniert nicht
  • wenn mehrere Statements vorhanden sind, aber nur eins Server-side-binding nutzt funktioniert das

Mischen von Transaktions- und Nicht-Transaktionsstatements in einem execute

  • per Default ist für execute Autocommit eingestellt → man braucht also die Transaktion nicht selbst zu commiten, das macht die Datenbank für einen
  • die meisten Kommandos (auch DDL-Kommandos) können in einer Transaktion ausgeführt werden
    • es gibt aber Ausnahmen wie „create database“
  • Postgres fasst intern alle Statements eines cursor()-Aufrufs zu einer Transaktion zusammen
  • ^ deswegen kann man im gleichen execute()-Aufruf keine Kommandos mischen die Transaktionen unterstützen und solche die es nicht tun
python/psycopg.1688143753.txt.gz · Zuletzt geändert: 2023/06/30 18:49 von root