PostgreSql et Python

Il existe plusieurs modules qui permettent à python de se connecter à une base de donnée PostgreSql. Un simple tour sur google permet de le voir. PyGreSQL est certainement le plus célèbre mais je préfère utiliser le module psycopg car:

  • il existe pour python 2.4 à 3.2 (donc malgré le passage à python 3 le module reste le même)
  • il est compatible postgresql 7.3 à 9.1
  • il respecte les API database
  • il est simple à installer
  • ... http://initd.org/psycopg/features/

Installation

pour l’installer il suffit d’utiliser easy install de Pypi

easy_install psycopg2

ou après avoir télécharger le module un simple

python setup.py install

Exemple

les paramètres de connection sont:

  • dbname – the database name (only in dsn string)
  • database – the database name (only as keyword argument)
  • user – user name used to authenticate
  • password – password used to authenticate
  • host – database host address (defaults to UNIX socket if not provided)
  • port – connection port number (defaults to 5432 if not provided)
import psycopg2
conn = psycopg2.connect("dbname=test user=postgres")
cur = conn.cursor()
cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);")
cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)",  (100, "abc'def"))
cur.execute("SELECT * FROM test;")
cur.fetchone()

conn.commit()
cur.close()
conn.close()

il est possible d’utiliser des dictionnaire comme entrée de requête

cur.execute(
    """INSERT INTO some_table (an_int, a_date, another_date, a_string)
        VALUES (%(int)s, %(date)s, %(date)s, %(str)s);""",
       {'int': 10, 'str': "O'Reilly", 'date': datetime.date(2005, 11, 18)})