Partage
  • Partager sur Facebook
  • Partager sur Twitter

SQLite - Create Virtual Table

    28 juillet 2021 à 19:19:46

    Bonjour,

    J'ai copié-collé un script sur SQLITE qui me permettrait de faire de la recherche textuelle FULLTEXT.

    Ce script installe une table virtuelle grâce à la commande CREATE VIRTUAL TABLE.

    Mais lorsque je clique sur Run, j'ai immédiatement un message d'erreur "Invalid syntax" sur le "V" de CREATE VIRTUAL TABLE posts, dès la première ligne.

    Est-ce l'un d'entre vous peut m'expliquer la démarche à suivre ? 

    A tout hasard, je précise que j'ai l'intention de me servir de cette table virtuelle  pour un script élaboré à partir des lignes de code obtenues sur Openclassroom dans le chapitre des index, avec des données sur des auteurs et des livres.

    Voici le script :

    # Create Virtual Table.py
    # https://www.sqlitetutorial.net/sqlite-full-text-search/
    
    
    CREATE VIRTUAL TABLE posts 
    USING FTS5(title, body);
    
    INSERT INTO posts(title,body)
    VALUES('Learn SQlite FTS5','This tutorial teaches you how to perform full-text search in SQLite using FTS5'),
    ('Advanced SQlite Full-text Search','Show you some advanced techniques in SQLite full-text searching'),
    ('SQLite Tutorial','Help you learn SQLite quickly and effectively');
    
    SELECT * FROM posts;
    
    SELECT * 
    FROM posts 
    WHERE posts MATCH 'fts5';
    
    SELECT * 
    FROM posts 
    WHERE posts = 'fts5';
    
    
    SELECT * 
    FROM posts('fts5');
    
    SELECT * 
    FROM posts 
    WHERE posts MATCH 'text' 
    ORDER BY rank;
    
    "learn SQLite"
    "learn + SQLite"
    
    SELECT * 
    FROM posts 
    WHERE posts MATCH 'learn SQLite';
    
    SELECT * 
    FROM posts
    WHERE posts = 'search*';
    
    SELECT * 
    FROM posts 
    WHERE posts MATCH 'learn NOT text';
    
    
    SELECT * 
    FROM posts 
    WHERE posts MATCH 'learn OR text';
    
    SELECT * 
    FROM posts 
    WHERE posts MATCH 'sqlite AND searching';
    
    SELECT * 
    FROM posts 
    WHERE posts MATCH 'search AND sqlite OR help';
    
    SELECT * 
    FROM posts 
    WHERE posts MATCH 'search AND (sqlite OR help)';
    
    SELECT highlight(posts,0, '<b>', '</b>') title, 
           highlight(posts,1, '<b>', '</b>') body
    FROM posts 
    WHERE posts MATCH 'SQLite'
    ORDER BY rank;
    
    
    


    Merci à ceux qui voudront bien "m'éclairer".

    • Partager sur Facebook
    • Partager sur Twitter
      28 juillet 2021 à 22:25:12

      Le message d'erreur dit juste qu'il n'y a pas l'extension FTS5 qui sait que faire de cette syntaxe.

      La démarche à suivre est juste dans la documentation (et c'est assez sportif: bon courage!)

      -
      Edité par mps 28 juillet 2021 à 22:26:23

      • Partager sur Facebook
      • Partager sur Twitter
        29 juillet 2021 à 1:39:28

        Pourquoi faire si compliqué ???

        • Partager sur Facebook
        • Partager sur Twitter
          29 juillet 2021 à 9:20:40

          chrisblues59 a écrit:

          Pourquoi faire si compliqué ???


          Qu'est ce qui est compliqué?
          • Partager sur Facebook
          • Partager sur Twitter
            29 juillet 2021 à 10:22:16

            Bonjour,

            D'après votre lien "Extension FTS5", pour utiliser FTS5, l'utilisateur crée une table virtuelle FTS5 avec une ou plusieurs colonnes. Par exemple: 

            Le site indiqué par Umfred ne dit pas autre chose :


            "Pour utiliser la recherche en FullText dans SQLite, vous utilisez le module de table virtuelle FTS5.

            L'instruction CREATE VIRTUAL TABLE suivante crée une table FTS5 avec deux colonnes : "

            De votre lien, je lis un peu plus loin sur le paragraphe 2. Compiling and Using FTS5, 2.1. Building FTS5 as part of SQLite

            "Depuis la version 3.9.0 (2015-10-14), FTS5 est inclus dans le cadre de la fusion SQLite."

            Ma version de Python est de 3.9.5, donc normalement, cela ne devrait pas poser de problème : que faut-il faire maintenant ? 

            -
            Edité par chrisblues59 29 juillet 2021 à 10:25:34

            • Partager sur Facebook
            • Partager sur Twitter
              29 juillet 2021 à 11:10:03

              python et sqlite ce n'est pas la même chose, ils parlent ici de la version 3.9.0 de sqlite pas de python. Et un peu plus loin, il indique que FTS5 est activé ou pas par défaut selon le type d'autoconf, et indique comment l'activer si besoin

              -
              Edité par umfred 29 juillet 2021 à 11:11:15

              • Partager sur Facebook
              • Partager sur Twitter
                29 juillet 2021 à 11:55:46

                chrisblues59 a écrit:

                Ma version de Python est de 3.9.5, donc normalement, cela ne devrait pas poser de problème : que faut-il faire maintenant ?

                Regarder la version de sqlite3 livrée avec Python, la mettre à jour si nécessaire et croiser les doigts pour que ce ne soit pas plus compliqué que mettre à jour la bibliothèque partagée avec des binaires compilés et/ou espérer qu'en cherchant un peu sur Internet on tombe sur une procédure de mise à jour de ce sqlite3 facile à suivre.

                C'est pas compliqué parce que çà fait partie du boulot du programmeur (construire avec ce qu'il a ou faire évoluer ses outils pour arriver à produire ce qu'il veut). Et le plus compliqué là dedans est d'arriver à maîtriser ce qu'on fait histoire d'être confiant sur le produit de l'opération (si on ne veut pas se rendre compte dans une semaine que la requête machin plante et avoir de gros doute sur ce qu'on a fait, il faut aussi "tester" que ce qu'on a fait est correct).

                -
                Edité par mps 29 juillet 2021 à 11:58:49

                • Partager sur Facebook
                • Partager sur Twitter
                  30 juillet 2021 à 5:26:40

                  Ma version de SQLite est 3.35.5 : pour l'instant, je n'ai pas encore trouvé le moyen de la mettre à jour. Mais, d'après vous, est-ce nécessaire, vu le n° de version dont la date de parution semble être postérieure à celle de FTS5 (2014) ?

                  -
                  Edité par chrisblues59 30 juillet 2021 à 5:32:18

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 juillet 2021 à 9:20:12

                    chrisblues59 a écrit:

                    Mais, d'après vous, est-ce nécessaire, vu le n° de version dont la date de parution semble être postérieure à celle de FTS5 (2014) ?

                    Si le "create virtual table" ne fonctionne pas, c''est que le module a été compilé sans cette extension. Ce qu'on devrait pourvoir vérifier dans les sources de Python. Après on fait quoi? Je vous ai suggéré d'évaluer d'abord l'approche binaires compilés (il n'y a que des copies à faire) plutôt qu'un build à partir des sources (sauf à trouver un document qui en décrive les étapes pas à pas).

                    -
                    Edité par mps 30 juillet 2021 à 9:20:46

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 juillet 2021 à 14:47:37

                      Je suppose que c'est cette partie-là que je dois utiliser, je suis sous Windows 64 bit...

                      Mais ma version étant 3.35.5, n'est-ce pas inadapté ?

                      • Partager sur Facebook
                      • Partager sur Twitter

                      SQLite - Create Virtual Table

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown