Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Django] Insertion dans une base de données

Sujet résolu
    1 mars 2011 à 13:08:34

    Bonjour,

    Je suis actuellement le cours de Natim, Cam et Cyril Mizzi sur Django. Tous va bien, je comprends comment il faut procéder pour faire tel ou tel chose en bref c'est super !

    Cependant j'ai un souci. Dans le tutoriel on créer une base de données mais elle est vide ; donc au moment de l'affichage des données, je n'ai rien. J'ai regardé sur Internet pour l'insertion de données dans un base de données avec Django et j'ai trouvé qu'il fallait faire ceci :
    >>> from mysite.polls.models import Poll, Choice # Importation des classes de modèles que nous venons d'écrire.
    
    # Il n'existe pas encore de sondage.
    >>> Poll.objects.all()
    []
    
    # Création d'un nouveau sondage.
    >>> import datetime
    >>> p = Poll(question="Quoi de neuf ?", pub_date=datetime.datetime.now())
    
    # Sauvegarde de l'objet dans la base de donnéees. Vous devez appeler save()
    explicitement.
    >>> p.save()
    
    # Maintenant, l'objet a une ID. Notez que le retour peut être "1L" au lieu
    # de 1, suivant la base de données que vous utilisez. Ce n'est rien, cela
    # signifie simplement que votre moteur de base de données renvoie les
    # entiers à Python sous la forme d'entiers longs.
    >>> p.id
    1
    
    # Accèdez aux colonnes de la base de données par des attributs Python.
    >>> p.question
    "Quoi de neuf ?"
    >>> p.pub_date
    datetime.datetime(2007, 7, 15, 12, 00, 53)
    
    # Modifiez les valeurs en changeant les attributs, puis en appelant save().
    >>> p.pub_date = datetime.datetime(2007, 4, 1, 0, 0)
    >>> p.save()
    
    # objects.all() affiche tous les sondages de la base de données.
    >>> Poll.objects.all()
    [<Poll: Poll object>]
    

    J'ai adapté le script à mes besoins en remplaçant mysite par blog, polls par sondages, etc.
    Arrivé à la ligne p.save() le terminal me renvoie une erreur qui est :

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib/python2.7/site-packages/django/db/models/base.py", line 458, in save
        self.save_base(using=using, force_insert=force_insert, force_update=force_update)
      File "/usr/lib/python2.7/site-packages/django/db/models/base.py", line 551, in save_base
        result = manager._insert(values, return_id=update_pk, using=using)
      File "/usr/lib/python2.7/site-packages/django/db/models/manager.py", line 195, in _insert
        return insert_query(self.model, values, **kwargs)
      File "/usr/lib/python2.7/site-packages/django/db/models/query.py", line 1524, in insert_query
        return query.get_compiler(using=using).execute_sql(return_id)
      File "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 788, in execute_sql
        cursor = super(SQLInsertCompiler, self).execute_sql(None)
      File "/usr/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 732, in execute_sql
        cursor.execute(sql, params)
      File "/usr/lib/python2.7/site-packages/django/db/backends/util.py", line 15, in execute
        return self.cursor.execute(sql, params)
      File "/usr/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 200, in execute
        return Database.Cursor.execute(self, query, params)
    django.db.utils.DatabaseError: no such table: sondages_sondage


    En gros, il me dit que la table sondages_sondage n'existe pas. Mais quand je fais python manage.py sql sondages, la table sondages_sondage existe bien. Comment puis-je faire s'il vous plaît :) ?

    Merci de votre aide.

    Cordialement, Robin.
    • Partager sur Facebook
    • Partager sur Twitter
      1 mars 2011 à 20:06:57

      T'as syncdb avant au moins ? Ce que tu rentres dans le shell, c'est bien avec manage.py shell ?
      • Partager sur Facebook
      • Partager sur Twitter
        2 mars 2011 à 9:42:20

        ce que je rentre dans le shell c'est : python manage.py sql sondages pour voir si les bases de données ont été crées.

        Comment fais-je pour voir si j'ai syncdb, s'il te plaît ? :)

        Merci.
        • Partager sur Facebook
        • Partager sur Twitter
          2 mars 2011 à 14:09:41

          Tu fais un syncdb, si tu vois que des tables sont ajoutées comme sondages par ex, c'est qu'elles n'y étaient pas auparavant et que ça devrait résoudre ton erreur.
          • Partager sur Facebook
          • Partager sur Twitter
            2 mars 2011 à 14:23:31

            Je dois faire python manage.py syncdb ? Parce que syncdb tout seul ça ne fonctionne pas. Il me dit bash: syncdb command not found.

            Merci.
            • Partager sur Facebook
            • Partager sur Twitter
              2 mars 2011 à 14:40:45

              Le terminal me dit : "no fixtures found". Que dois-je faire s'il te plaît ? :)
              • Partager sur Facebook
              • Partager sur Twitter
                3 mars 2011 à 16:25:35

                Est-ce que quelqu'un aurai la solution à mon problème s'il vous plaît ? :)

                Merci.
                • Partager sur Facebook
                • Partager sur Twitter
                  5 mars 2011 à 23:08:22

                  Citation : robin850

                  Le terminal me dit : "no fixtures found". Que dois-je faire s'il te plaît ? :)



                  Et bien ce message signifie qu'il n'y a rien de nouveau à mettre à jour concernant la base de données.
                  Vérifie le modèle de ton (ou tes) applications Django.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 mars 2011 à 10:17:54

                    Voci mes modèles :
                    from django.db import models
                    
                    class Sondage(models.Model):
                    	question = models.CharField(max_length=200)
                    	date_publication = models.DateTimeField()
                    
                    class Reponse(models.Model):
                    	sondage = models.ForeignKey(Sondage)
                    	choix = models.CharField(max_length=200)
                    	nb_votes = models.IntegerField()
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 mars 2011 à 16:28:18

                      Le « no fixtures found » c'est une erreur ou une simple information ?
                      Si c'est juste une information ou un avertissement, ça veut dire que le syncdb à bien fonctionné et tu peux donc insérer tes enregistrement : ça fonctionnera.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 mars 2011 à 9:57:54

                        Salut,

                        quand j'essaye d'importer mes modèles avec from sondages.models import Sondage par exemple, voilà ce qu'il me retourne :
                        Traceback (most recent call last):
                          File "<stdin>", line 1, in <module>
                          File "sondages/models.py", line 1, in <module>
                            from django.db import models
                          File "/usr/lib/python2.7/site-packages/django/db/__init__.py", line 14, in <module>
                            if not settings.DATABASES:
                          File "/usr/lib/python2.7/site-packages/django/utils/functional.py", line 276, in __getattr__
                            self._setup()
                          File "/usr/lib/python2.7/site-packages/django/conf/__init__.py", line 38, in _setup
                            raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE)
                        ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.

                        non plus, je ne sais pas comment modifier la variable d'environnement :( .

                        Cordialement, Robin.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          12 mars 2011 à 11:02:04

                          Eh bien le message a l'air clair, ta variable DJANGO_SETTINGS_MODULE doit être définie
                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 mars 2011 à 11:16:17

                            J'ai lu la page que tu m'as donnée. Merci. Cependant j'ai une erreur (une de plus) quand je fais ceci :
                            >>> export DJANGO_SETTINGS_MODULE=blog.sondages
                              File "<stdin>", line 1
                                export DJANGO_SETTINGS_MODULE=blog.sondages
                                                            ^
                            SyntaxError: invalid syntax
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              12 mars 2011 à 11:35:20

                              En partant du répertoire de ton projet que donne cette commande

                              python manage.py runserver


                              Dans la commande export, ton fichier doit se terminer par ".settings"
                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 mars 2011 à 11:44:28

                                Voilà ce que me renvoie le terminal :
                                Validating models...
                                0 errors found
                                
                                Django version 1.2.5, using settings 'blog.settings'
                                Development server is running at http://127.0.0.1:8000/
                                Quit the server with CONTROL-C.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  12 mars 2011 à 11:52:07

                                  ok, édite ton fichier settings.py et suit les informations de cette page.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    12 mars 2011 à 12:04:34

                                    Ok, mais j'ai déjà rajouté mon application dans INSTALLED_APPS. Est ce que c'est ça que tu voulais me dire ?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      12 mars 2011 à 12:07:57

                                      Non je veux que tu vérifies ton settings.py en suivant les indications du lien donné précédemment.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        12 mars 2011 à 12:16:13

                                        Je n'ai rien trouvé qui pourrait vraiment m'aider sur la page. En plus la version de Django de cette page est la 1.1.1. Voici mon fichier settings.py :
                                        # -*- coding: utf-8 -*-
                                        # Django settings for blog project.
                                        
                                        DEBUG = True
                                        TEMPLATE_DEBUG = DEBUG
                                        
                                        ADMINS = (
                                            (u'Cyril Mizzi', 'cyril.mizzi@gmail.com'),
                                            (u'Natim', 'natim@siteduzero.com'),
                                            (u'Cam', 'cam@siteduzero.com')
                                        )
                                        
                                        MANAGERS = ADMINS
                                        
                                        DATABASES = {
                                            'default': {
                                                'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
                                                'NAME':' blog.db',                      # Or path to database file if using sqlite3.
                                                'USER': '',                      # Not used with sqlite3.
                                                'PASSWORD': '',                  # Not used with sqlite3.
                                                'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
                                                'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
                                            }
                                        }
                                        
                                        # Local time zone for this installation. Choices can be found here:
                                        # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
                                        # although not all choices may be available on all operating systems.
                                        # On Unix systems, a value of None will cause Django to use the same
                                        # timezone as the operating system.
                                        # If running in a Windows environment this must be set to the same as your
                                        # system time zone.
                                        TIME_ZONE = 'Europe/Paris'
                                        
                                        # Language code for this installation. All choices can be found here:
                                        # http://www.i18nguy.com/unicode/language-identifiers.html
                                        LANGUAGE_CODE = 'fr-fr'
                                        
                                        SITE_ID = 1
                                        
                                        # If you set this to False, Django will make some optimizations so as not
                                        # to load the internationalization machinery.
                                        USE_I18N = True
                                        
                                        # If you set this to False, Django will not format dates, numbers and
                                        # calendars according to the current locale
                                        USE_L10N = True
                                        
                                        # Absolute filesystem path to the directory that will hold user-uploaded files.
                                        # Example: "/home/media/media.lawrence.com/"
                                        MEDIA_ROOT = '/home/robin/blog'
                                        
                                        # URL that handles the media served from MEDIA_ROOT. Make sure to use a
                                        # trailing slash if there is a path component (optional in other cases).
                                        # Examples: "http://media.lawrence.com", "http://example.com/media/"
                                        MEDIA_URL = '/medias/'
                                        
                                        # URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
                                        # trailing slash.
                                        # Examples: "http://foo.com/media/", "/media/".
                                        ADMIN_MEDIA_PREFIX = '/media/'
                                        
                                        # Make this unique, and don't share it with anybody.
                                        SECRET_KEY = 'gt4=z3h6r%_&^muawset3&!e#mpgi54qw2ai(g6476@aq&!c3+'
                                        
                                        # List of callables that know how to import templates from various sources.
                                        TEMPLATE_LOADERS = (
                                            'django.template.loaders.filesystem.Loader',
                                            'django.template.loaders.app_directories.Loader',
                                        #     'django.template.loaders.eggs.Loader',
                                        )
                                        
                                        MIDDLEWARE_CLASSES = (
                                            'django.middleware.common.CommonMiddleware',
                                            'django.contrib.sessions.middleware.SessionMiddleware',
                                            'django.middleware.csrf.CsrfViewMiddleware',
                                            'django.contrib.auth.middleware.AuthenticationMiddleware',
                                            'django.contrib.messages.middleware.MessageMiddleware',
                                        )
                                        
                                        ROOT_URLCONF = 'blog.urls'
                                        
                                        TEMPLATE_DIRS = (
                                            # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
                                            # Always use forward slashes, even on Windows.
                                            # Don't forget to use absolute paths, not relative paths.
                                            '/home/robin/blog//templates'
                                        )
                                        
                                        INSTALLED_APPS = (
                                            'django.contrib.auth',
                                            'django.contrib.contenttypes',
                                            'django.contrib.sessions',
                                            'django.contrib.sites',
                                            'django.contrib.messages',
                                            'blog.sondages',
                                            # Uncomment the next line to enable the admin:
                                            # 'django.contrib.admin',
                                            # Uncomment the next line to enable admin documentation:
                                            # 'django.contrib.admindocs',
                                        )
                                        

                                        Si tu vois une erreur quelconque, dit le moi :) .

                                        Merci pour ton aide.

                                        Cordialement, Robin.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          12 mars 2011 à 12:32:22

                                          Ok, non j'en vois pas

                                          Fais un

                                          python manage.py syncdb


                                          sinon le retour aussi de

                                          python manage.py validate
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            12 mars 2011 à 12:47:55

                                            Voilà ce que me retourne python manage.py syncdb :
                                            Creating table django_admin_log
                                            Installing index for admin.LogEntry model
                                            No fixtures found.


                                            Et python manage.py validate
                                            0 errors found

                                            Ca à l'air bon pourtant :euh:
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              12 mars 2011 à 14:31:14

                                              Citation : robin850

                                              J'ai lu la page que tu m'as donnée. Merci. Cependant j'ai une erreur (une de plus) quand je fais ceci :

                                              >>> export DJANGO_SETTINGS_MODULE=blog.sondages
                                                File "<stdin>", line 1
                                                  export DJANGO_SETTINGS_MODULE=blog.sondages
                                                                              ^
                                              SyntaxError: invalid syntax

                                              Ca se fait dans le shell linux ça (bash pour toi), pas dans l'interpréteur python ...
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                12 mars 2011 à 14:49:19

                                                De toutes façons la page n'a pas vraiment l'air à jour. Il dise de faire django-admin.py runserver mais dans mes fichiers je n'ai pas de fichier django-admin.py.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  12 mars 2011 à 16:15:59

                                                  Si tu veux un shell python pour un projet django, tu dois aller dans le répertoire de ton projet et faire « python manage.py shell ». C'est ce que tu as fait ?

                                                  Et pour le django-admin.py, si il existe : il est localisé dans ton PATH, donc ça fonctionnera. Mais je te conseille de faire python manage.py (django-admin.py c'est plus pour démarrer des projets et tout je dirais).
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    12 mars 2011 à 17:01:49

                                                    Ok, mais mon problème est toujours là. :( Est ce que quelqu'un à une idée s'il vous plaît ?
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Anonyme
                                                      12 mars 2011 à 17:06:38

                                                      Il m'a l'air de ne pas avoir de soucis, maintenant il suffit de suivre cette page du tuto.

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        12 mars 2011 à 17:11:57

                                                        C'est fait, ma page marche bien. J'ai déjà fait les vues. Il doit même se connecter à la base de données car j'ai fait un {% empty %} et il m'affiche bien, il n'y a pas de sondages. Mon problème est là lorsque je veut insérer un enregistrement.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          12 mars 2011 à 17:14:43

                                                          t'as créé ta structure te permettant de recevoir ton application de sondage ?

                                                          python manage.py startapp polls
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            12 mars 2011 à 17:35:21

                                                            Oui, j'ai un dossier sondages avec les vues, les models et les templates :) . La page s'affiche correctement, je voudrais juste réaliser des insertions.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            [Django] Insertion dans une base de données

                                                            × 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