IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Sqlite3 : activer foreign_keys


Sujet :

Python

  1. #21
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 492
    Billets dans le blog
    6
    Par défaut
    @wiztricks:

    C'est quand même pas si compliqué, non?
    Oui, mais sans utiliser le "ON DELETE RESTRICT", j'obtiens une exception lors de la tentative de delete, et antoinev2 non. Ceci avec le même code Python, la même base et le même OS (Windows): il y a autre chose.

    @antoinev2:

    Ça peut venir d'une différence de Python et de son pilote sqlite3, mais aussi de la version de sqlite3 (le sqlite3.dll qui se trouve dans "C:\Python27\DLLs"). J'ai le Python 2.7.2, et ma version de sqlite3 est la 3.6.21. Voilà comment j'ai obtenu cette dernière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cur.execute("SELECT sqlite_version();")
    print cur.fetchone()[0]
    La prise en compte de "foreign key" est assez récente. Selon la version que tu as, regarde ici ce que ta version ne fait pas par rapport à la mienne: http://www.sqlite.org/news.html et "Old news" en fin de page.

    Si la différence entre nous est expliquée par la différence de version et que tu ne peux pas moderniser ton Python, il faudra essayer le "ON DELETE DISTRICT" comme wiztricks le propose.

  2. #22
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Oui, mais sans utiliser le "ON DELETE RESTRICT", j'obtiens une exception lors de la tentative de delete, et antoinev2 non. Ceci avec le même code Python, la même base et le même OS (Windows): il y a autre chose.
    "ON DELETE RESTRICT" ne sert qu'à avoir l'erreur avant le commit.
    Sinon, la version de sqlite en Python 2.6.6 est 3.5.9.
    Et les foreign keys, après test de mon brico précédent, snif: les "foreign keys", il s'en fout.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #23
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 492
    Billets dans le blog
    6
    Par défaut
    Oui, d'après le lien que j'ai donné, la prise en compte des foreign keys arrive avec la version 3.6.19.

  4. #24
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 790
    Par défaut
    En plus la question de base du PO était pourquoi que le sqlite sous Windows ne se comporte pas pareil que celui qui est embarqué avec Python...
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #25
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 492
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il y a une possibilité assez simple de mettre à jour le sqlite3 de Python sous Windows sans mettre à jour Python. Et si ça ne marche pas, on peut toujours revenir en arrière.

    1- On télécharge sqlite3.dll ici: http://www.sqlite.org/download.html: ça s'appelle aujourd'hui "sqlite-dll-win32-x86-3071401.zip" (version 3.7.14.1). On dézipe.

    2- On cherche le sqlite3.dll de Python qui devrait se trouver dans C:\Python26\DLLs, et on le renomme en sqlite3_sav.dll (par exemple).

    3- On copie le sqlite3.dll téléchargé à la place.

    4- On vérifie que ça marche:
    - on exécute la console (cmd.exe)
    - on se place dans le répertoire de test: "cd C:\Python26\Lib\test"
    - on exécute le test: "python test_sqlite.py"
    - s'il n'y a aucune erreur: ça marche! Sinon, on revient en arrière (on efface le nouveau sqlite3.dll et on renomme l'ancien).

    5- Si ça a marché, on vérifie la mise à jour en testant la version du nouveau sqlite3:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cur.execute("SELECT sqlite_version();")
    print cur.fetchone()[0]
    La réussite n'est pas garantie: elle dépend de l'écart qu'il y a entre le nouveau sqlite3.dll et le pilote sqlite3 du Python qu'on a.

    J'ai souvent fait ça pour avoir la dernière version quand j'avais une application critique utilisant sqlite3, et ça a toujours marché. Je viens de le faire: en 3 ou 4 minutes, j'ai maintenant la dernière version 3.7.14.1!

    Ok?

  6. #26
    Membre confirmé
    Avatar de antoinev2
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 177
    Par défaut
    Bonjour,

    Merci pour votre aide, la version de Sqlite3 utilisée par Python 2.6.2 est bien la 3.5.9, donc en effet ne gère pas du tout l'intégrité référentielle... l'origine du problème est finalement assez simple! Dommage qu'on n'ait pas un message d'erreur en cas de saisie d'un PRAGMA non pris en charge, quand même... ce "détail" est précisé sur le site de Sqlite mais c'est pas pratique.

    Justement je pensais à une solution de ce type, simplement remplacer le dll de sqlite3 par une version plus récente, mais au final je vais passer à Python 2.7. Ca permettra d'ailleurs un écart de versions moins grand si après je veux utiliser le dll de sqlite3 le plus récent.

    Faudra que j'installe le sqlite3 de la même version que celle utilisée par Python, ça m'évitera d'avoir ce genre d'écart...

  7. #27
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 492
    Billets dans le blog
    6
    Par défaut
    Petits compléments optionnels:

    - Pour assurer des modifications de structures de la base que sqlite3 ne supporte pas (les fonctionalités "ALTER" sont limitées), je transforme la base en script sql, je modifie le script et je retransforme le script en base: voir mon tuto ici: http://python.jpvweb.com/mesrecettes...rde_script_sql.

    - Pour compléter la gestion de la base, j'utilise aussi "SqliteExpert" (http://www.sqliteexpert.com/). J'ai acheté la version payante, mais il y a aussi une version gratuite.

    Bon courage!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [langage] Pb avec Active perl :s
    Par Cetras dans le forum Langage
    Réponses: 2
    Dernier message: 02/09/2003, 13h28
  2. Fonction qui s'active lorsqu'un Form bouge
    Par Xavier dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/05/2003, 12h54
  3. [VB6][active x] faire du multi-thread avec vb
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/05/2003, 12h01
  4. Tester connexion Internet active sous Windows
    Par Altau dans le forum Développement
    Réponses: 3
    Dernier message: 12/08/2002, 12h43
  5. [Kylix] Clé d'activation
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 27/03/2002, 23h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo