Bonjour,

Après le longues années sans programmer, je me suis mis à Python 2.6 et sqlite depuis 2 jours en suivant le tutoriel Swinnen.
Je trouve ce langage super et je suis bluffé par ce qu'on peut faire avec si peu de lignes ! L'exercice de l'oscilloscope est ENORME !!

Tout ça pour dire que je suis mega débutant. Je vous expose mon problème :

J'arrive à lire des fichier et créer une base de donnée , insérer et lire les valeurs.

Mais lorsque j'essai d'importer les données depuis un fichier csv dans lequel il y a du texte en bon français ça plante et cela me dit :

ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.

J'ai bien sûr essayé de chercher sur le forum et sur google mais je ne comprend rien !! à ce histoires de code, decode, utf8, ...

Je ne peux pas importer tel quel mon texte dans sqlite pour le relire ensuite via ma future application ?

voici mon code , ce serait sympa si quelqu'un pouvait m'éclairer un peu svp :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
#! /usr/bin/env python
#-*- coding: utf-8 -*-
 
from os import chdir
import sqlite3
import csv
 
# Ouverture fichier à plat
 
chdir("G:/__Prog/Quizz/bdd")
fic_liste = open('liste.csv','r')
csv.field_size_limit(100000)            #see below!
ligne = fic_liste.readline()                                # lecture ligne nom champs
 
input = csv.reader(fic_liste, delimiter=',')
 
# Création base de donnée et table 
 
conn = sqlite3.connect("G:/__Prog/Quizz/bdd/Quizz.sqlite")  # ouverture de la base
c = conn.cursor()                                           # obtention d'un curseur
try:
    c.execute("CREATE TABLE liste (proprio     VARCHAR (60),    \
                                   sujet       VARCHAR (60),   \
                                   theme       VARCHAR (60),   \
                                   type        VARCHAR (60),   \
                                   question    TEXT,           \
                                   reponse     TEXT,           \
                                   nb_qpos     INTEGER,        \
                                   nb_qok      INTEGER,        \
                                   nb_qko      INTEGER  )")
except:
    c.execute("DROP TABLE liste")
    print "table BOMBEE"
    c.execute("CREATE TABLE liste (proprio     VARCHAR (60),    \
                                   sujet       VARCHAR (60),   \
                                   theme       VARCHAR (60),   \
                                   type        VARCHAR (60),   \
                                   question    TEXT,           \
                                   reponse     TEXT,           \
                                   nb_qpos     INTEGER,        \
                                   nb_qok      INTEGER,        \
                                   nb_qko      INTEGER  )")
    print "table cree"
 
# Lecture séquentielle du fichier et chargement de la table
 
l=0
for item in input:
    l=l+1
    print "ligne ", l, " : ", item
    c.execute('INSERT into liste VALUES (?,?,?,?,?,?,?,?,?)', item ) 
 
curse.commit()
c.close()
conn.close()
Pour info, je sauvegarde le fichier csv avec OpenOffice qui me propose plein de formats mais je ne sais pas trop à quoi ça correspond et lequel prendre. J'ai pris celui par défaut en bleu :