Insérer automatiquement des données SQL dans un fichier reStructuredText
Nous allons créer une base de données de produits avec leurs versions, puis mettre en forme ces informations dans un fichier reStructuredText. Elles pourront donc facilement être mises en forme et publiées au format PDF, HTML ou autre.
-
Créez la base de données SQLite3
productdb.db
:#!/usr/bin/python# coding: utf8import sqlite3try:db = sqlite3.connect('productdb.db')cursor = db.cursor()cursor.execute('''CREATE TABLE products (product text,version text)''')db.commit()cursor.close()db.close()except:print('Erreur lors de la création de la base.')exit(1)print('La base de données a été créée.') -
Insérez des données dans la base :
#!/usr/bin/python# coding: utf8import sqlite3prods = [('dianthus', '1.0'), ('geum', '1.5'), ('prunus', '2.3'),('dianthus', '1.1'), ('geum', '1.7'), ('prunus', '2.5'),('dianthus', '1.2'), ('geum', '3.5'), ('prunus', '2.7'), ]try:db = sqlite3.connect('productdb.db')cursor = db.cursor()for data in prods:cursor.execute('INSERT INTO products (product, version) <abbr title="?, ?">VALUES</abbr> ',data)db.commit()cursor.close()db.close()except:print('Erreur lors de l\'insertion de données dans la base.')exit(1)print('Les données ont été insérées.') -
Créez le fichier
modele-sql.rst
suivant :{% for prod in product %}{{ prod | capitalize }}{% for c in prod %}-{% endfor %}{% for ver in version %}- {{ ver }}{% endfor %}{% endfor %} -
Exécutez le script Python suivant :
#!/usr/bin/python# coding: utf8import sqlite3import jinja2env = jinja2.Environment(loader=jinja2.FileSystemLoader('./'))template = env.get_template('modele-sql.rst')print('Produits et versions\n====================')try:db = sqlite3.connect('productdb.db')cursor = db.cursor()for myprod in ("dianthus", "geum", "prunus"):t = (myprod,)cursor.execute('SELECT version FROM products WHERE product = ?', t)mylist = []for row in cursor:mylist.append('{}'.format(*row))data = {'product': [myprod],'version': mylist}print(template.render(data))cursor.close()db.close()except:print('Erreur lors de la lecture de la base.')exit(1)Le contenu suivant s’affiche :
Produits et versions====================Dianthus--------- 1.0- 1.1- 1.2Geum----- 1.5- 1.7- 3.5Prunus------- 2.3- 2.5- 2.7