Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation de flask et création base de données

    11 octobre 2022 à 11:59:42

    Bonjour,

    Je suis en train de suivre et d'adapter ce cours pour qu'il réponde à mes besoins (projet mais aussi base de donnée) : openclassrooms.com/fr/courses/4425066-concevez-un-site-avec-flask/4525912-ajoutez-une-nouvelle-table-dans-la-base-de-donnees



    Actuellement, je suis bloqué au niveau de la base de donnée. En effet, je n'utilise pas sqlite donc j'ai du un peu adapter cette partie.

    Voici ce que j'ai fais (j'ai suivi le tuto donc j'ai à quelque chose près le même nom de dossiers et fichier, cependant si besoin je peux faire une capture d'écran) :

    je commence par models.py


    from flask_sqlalchemy import SQLAlchemy
    
    from .views import app
    
    # Create database connection object
    db = SQLAlchemy(app)
    
    class User(db.Model):
        __tablename__ = 'User'
        id = db.Column(db.Integer(11), primary_key=True, nullable=False, unique=True, autoincrement=True)
        nom_crypto = db.Column(db.char(255), nullable=False)
        quantite_actuel = db.Column(db.float(), nullable=False)
        quantite_vendu = db.Column(db.float(), nullable=False)
        prix_achat = db.Column(db.float(), nullable=False)
        prix_vente = db.Column(db.float(), nullable=False)
    
        def __init__(self, nom_crypto, quantite_actuel, quantite_vendu, prix_achat, prix_vente):
            self.nom_crypto = nom_crypto
            self.quantite_actuel = quantite_actuel
            self.quantite_vendu = quantite_vendu
            self.prix_achat = prix_achat
            self.prix_vente = prix_vente
    
    db.create_all()


    Ensuite __init__.py

    from flask import Flask
    from .views import app
    from . import models
    
    # Connect sqlalchemy to app
    models.db.init_app(app)


    Voici mon config.py

    import sqlalchemy
    import os
    
    basedir = os.path.abspath(os.path.dirname(__file__))
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:toto@127.0.0.1:3306/mariadb' + os.path.join(basedir, 'app.db')
    
    # Test if it works
    engine = sqlalchemy.create_engine(SQLALCHEMY_DATABASE_URI, echo=True)
    print(engine.table_names())


    Je précise que je suis sur linux avec xampp
    voici les deux commandes que je fais :

    /opt/lampp/bin/mysql -u root -p


    Je rentre mon mot de passe et suis connecter à mariaDB. Voici le message : 

    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 44
    Server version: 10.4.24-MariaDB Source distribution
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


    Bref, jusqu’à présent aucun problème

    Cependant, lorsque je rentre : 

    FLASK_APP=run.py flask shell;

    Cela ne fonctionne pas et met ceci comme erreur : 

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FLASK_APP=run.py flask shell' at line 1

    Si j'ai bien tout compris du début du cours, le sql est dans models.py


    Voici mes routes si cela peut aider (views.py) : 


    import os
    import sys
    sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))
    from flask import Flask, render_template
    from config import basedir
    
    app = Flask(__name__)
    
    # Config options - Make sure you created a 'config.py' file.
    app.config.from_object('config')
    # To get one variable, tape app.config['MY_VARIABLE']
    
    @app.route('/test')
    def index():
        return "Hello world !"
    
    @app.route('/')
    def accueil():
        # return 'Page accueil'
        return render_template('templates/accueil.html')
        
    @app.route('/add/')
    def add():
        # return 'Page add'
        return render_template('templates/add.html')
        
    @app.route('/prevewGraph/')
    def prevewGraph():
        # return 'Page prevewGraph'
        return render_template('templates/prevewGraph.html')
    
    @app.route('/remove/')
    def remove():
        # return 'Page remove'
        return render_template('templates/remove.html')
    
    if __name__ == "__main__":
        print(f'******* {basedir} ')
        app.run()

    à la racine, j'ai donc app.db qui est vide et run.py ou l'on trouve : 


    import app
    from app import app
    
    if __name__ == "__main__":
        app.run(debug=True)


    En tout cas, merci par avance

    • Partager sur Facebook
    • Partager sur Twitter

    Merci à tous. Vous pouvez me retrouver ici :

    🌐 Visitez mon profil sur Comeup

    🚀 Découvrez BeFreelancr

    📱 Retrouvez-moi sur LinkedIn

      11 octobre 2022 à 16:09:18

      tu sembles taper la ligne "FLASK_APP=run.py flask shell;" dans le terminal/console mariadb (qui n'accepte que des commandes mariadb/mysql) alors que ça n'a rien à voir; la commande est censé lancer la console de Flask, donc la ligne est à saisir dans le shell (console linux)
      • Partager sur Facebook
      • Partager sur Twitter
        11 octobre 2022 à 19:17:16

        umfred a écrit:

        tu sembles taper la ligne "FLASK_APP=run.py flask shell;" dans le terminal/console mariadb (qui n'accepte que des commandes mariadb/mysql) alors que ça n'a rien à voir; la commande est censé lancer la console de Flask, donc la ligne est à saisir dans le shell (console linux)


        Bonsoir et merci pour la réponse.

        Je viens de me rendre compte que j'ai plusieurs soucis : 


        1) J'ai le dossier __pycache__ en double.

        Le premier  __pycache__ est à la racine du projet et contient les fichiers : config.cpython-310.pyc et run.cpython-310.pyc

        Le second __pycache__  est dans le dossier app et contient les fichiers suivants : __init__.cpython-310.pyc, models.cpython-310.pyc et views.cpython-310.pyc

        Au final, même si les fichiers sont différents et les noms de dossiers identiques, je ne sais même pas à quoi ils servent.



        2) Voici les lignes de commandes que j'ai fais : 

        - . venv/bin/activate

        - FLASK_APP=run.py flask shell

        et cela me renvoie l'erreur suivante : 

        Usage: flask shell [OPTIONS]
        Try 'flask shell --help' for help.
        
        Error: While importing 'run', an ImportError was raised:
        
        Traceback (most recent call last):
          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 218, in locate_app
            __import__(module_name)
          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/run.py", line 1, in <module>
            import app
          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/__init__.py", line 2, in <module>
            from .views import app
          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/views.py", line 5, in <module>
            from config import basedir
          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/config.py", line 8, in <module>
            engine = sqlalchemy.create_engine(SQLALCHEMY_DATABASE_URI, echo=True)
          File "<string>", line 2, in create_engine
          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/util/deprecations.py", line 309, in warned
            return fn(*args, **kwargs)
          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 548, in create_engine
            dbapi = dialect_cls.dbapi(**dbapi_args)
          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/dialects/mysql/pymysql.py", line 68, in dbapi
            return __import__("pymysql")
        ModuleNotFoundError: No module named 'pymysql'

        merci et bonne soirée

        • Partager sur Facebook
        • Partager sur Twitter

        Merci à tous. Vous pouvez me retrouver ici :

        🌐 Visitez mon profil sur Comeup

        🚀 Découvrez BeFreelancr

        📱 Retrouvez-moi sur LinkedIn

          11 octobre 2022 à 19:50:19

          le message d'erreur indique qu'il manque le module pymysql dans ton environnement; donc il faut l'installer depuis cet environnement via pip install PyMySQL ( https://pypi.org/project/PyMySQL/#installation )
          • Partager sur Facebook
          • Partager sur Twitter
            12 octobre 2022 à 10:17:11

            umfred a écrit:

            le message d'erreur indique qu'il manque le module pymysql dans ton environnement; donc il faut l'installer depuis cet environnement via pip install PyMySQL ( https://pypi.org/project/PyMySQL/#installation )


            Bonjour,

            J'ai fais l'installation, mais cela n'a pas résolue mon problème. Lorsque je fais : 

            ligne de commande : FLASK_APP=run.py flask shell
            
            erreur : 
            
            Traceback (most recent call last):
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/bin/flask", line 8, in <module>
                sys.exit(main())
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 1047, in main
                cli.main()
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1055, in main
                rv = self.invoke(ctx)
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
                return _process_result(sub_ctx.command.invoke(sub_ctx))
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
                return ctx.invoke(self.callback, **ctx.params)
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 760, in invoke
                return __callback(*args, **kwargs)
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/decorators.py", line 26, in new_func
                return f(get_current_context(), *args, **kwargs)
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 354, in decorator
                app = __ctx.ensure_object(ScriptInfo).load_app()
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 308, in load_app
                app = locate_app(import_name, name)
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 218, in locate_app
                __import__(module_name)
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/run.py", line 1, in <module>
                import app
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/__init__.py", line 3, in <module>
                from . import models
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/models.py", line 8, in <module>
                class User(db.Model):
              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/models.py", line 10, in User
                id = db.Column(db.Integer(11), primary_key=True, nullable=False, unique=True, autoincrement=True)
            TypeError: Integer() takes no arguments

            merci d'avance pour votre aide

            • Partager sur Facebook
            • Partager sur Twitter

            Merci à tous. Vous pouvez me retrouver ici :

            🌐 Visitez mon profil sur Comeup

            🚀 Découvrez BeFreelancr

            📱 Retrouvez-moi sur LinkedIn

              12 octobre 2022 à 10:27:11

              bah si, on a changé de problème dans le code. il faut juste bien lire l'erreur 

              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/models.py", line 10, in User
                id = db.Column(db.Integer(11), primary_key=True, nullable=False, unique=True, autoincrement=True)
              TypeError: Integer() takes no arguments

              bref, ne pas mettre de valeur dans db.Integer (ni de parenthèse pour le coup) sur la ligne indiquée (db.integer(11) => db.Integer)

              • Partager sur Facebook
              • Partager sur Twitter
                12 octobre 2022 à 12:39:56

                umfred a écrit:

                bah si, on a changé de problème dans le code. il faut juste bien lire l'erreur 

                File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/models.py", line 10, in User
                  id = db.Column(db.Integer(11), primary_key=True, nullable=False, unique=True, autoincrement=True)
                TypeError: Integer() takes no arguments

                bref, ne pas mettre de valeur dans db.Integer (ni de parenthèse pour le coup) sur la ligne indiquée (db.integer(11) => db.Integer)

                Bonjour,

                Merci baucoup pour votre aide, je débute et vous suis reconnaissante de m'aider à trouver mes erreurs (je savais même pas ou les chercher au départ tellement il y avait de note dans le terminal).

                J'ai donc suivit votre conseil (merci)

                voici ce que j'ai maintenant (je précise que j'ai fais des recherches mais je pense que je manque d'expérience en python et je n'ai rien trouvé. Ce n'est pas une question de : je veux que vous me fournissiez les réponses et que je n'ai rien à faire. (je préfère préciser =) ))

                ligne commande : FLASK_APP=run.py flask shell
                
                erreur : Traceback (most recent call last):
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3361, in _wrap_pool_connect
                    return fn()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 320, in connect
                    return _ConnectionFairy._checkout(self)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 884, in _checkout
                    fairy = _ConnectionRecord.checkout(pool)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 486, in checkout
                    rec = pool._do_get()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 145, in _do_get
                    with util.safe_reraise():
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
                    compat.raise_(
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
                    raise exception
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 143, in _do_get
                    return self._create_connection()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 266, in _create_connection
                    return _ConnectionRecord(self)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 381, in __init__
                    self.__connect()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 677, in __connect
                    with util.safe_reraise():
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
                    compat.raise_(
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
                    raise exception
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 673, in __connect
                    self.dbapi_connection = connection = pool._invoke_creator(self)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 578, in connect
                    return dialect.connect(*cargs, **cparams)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 598, in connect
                    return self.dbapi.connect(*cargs, **cparams)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/pymysql/connections.py", line 353, in __init__
                    self.connect()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/pymysql/connections.py", line 633, in connect
                    self._request_authentication()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/pymysql/connections.py", line 907, in _request_authentication
                    auth_packet = self._read_packet()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet
                    packet.raise_for_error()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error
                    err.raise_mysql_exception(self._data)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
                    raise errorclass(errno, errval)
                pymysql.err.ProgrammingError: (1102, "Incorrect database name 'mariadb/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app.db'")
                
                The above exception was the direct cause of the following exception:
                
                Traceback (most recent call last):
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/bin/flask", line 8, in <module>
                    sys.exit(main())
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 1047, in main
                    cli.main()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1055, in main
                    rv = self.invoke(ctx)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
                    return _process_result(sub_ctx.command.invoke(sub_ctx))
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
                    return ctx.invoke(self.callback, **ctx.params)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 760, in invoke
                    return __callback(*args, **kwargs)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/decorators.py", line 26, in new_func
                    return f(get_current_context(), *args, **kwargs)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 354, in decorator
                    app = __ctx.ensure_object(ScriptInfo).load_app()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 308, in load_app
                    app = locate_app(import_name, name)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 218, in locate_app
                    __import__(module_name)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/run.py", line 1, in <module>
                    import app
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/__init__.py", line 2, in <module>
                    from .views import app
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/views.py", line 5, in <module>
                    from config import basedir
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/config.py", line 10, in <module>
                    print(engine.table_names())
                  File "<string>", line 2, in table_names
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/util/deprecations.py", line 402, in warned
                    return fn(*args, **kwargs)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3331, in table_names
                    with self._optional_conn_ctx_manager(connection) as conn:
                  File "/usr/lib/python3.10/contextlib.py", line 135, in __enter__
                    return next(self.gen)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3083, in _optional_conn_ctx_manager
                    with self.connect() as conn:
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3315, in connect
                    return self._connection_cls(self, close_with_result=close_with_result)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 96, in __init__
                    else engine.raw_connection()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3394, in raw_connection
                    return self._wrap_pool_connect(self.pool.connect, _connection)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3364, in _wrap_pool_connect
                    Connection._handle_dbapi_exception_noconnection(
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2198, in _handle_dbapi_exception_noconnection
                    util.raise_(
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
                    raise exception
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 3361, in _wrap_pool_connect
                    return fn()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 320, in connect
                    return _ConnectionFairy._checkout(self)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 884, in _checkout
                    fairy = _ConnectionRecord.checkout(pool)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 486, in checkout
                    rec = pool._do_get()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 145, in _do_get
                    with util.safe_reraise():
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
                    compat.raise_(
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
                    raise exception
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/impl.py", line 143, in _do_get
                    return self._create_connection()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 266, in _create_connection
                    return _ConnectionRecord(self)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 381, in __init__
                    self.__connect()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 677, in __connect
                    with util.safe_reraise():
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__
                    compat.raise_(
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 208, in raise_
                    raise exception
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 673, in __connect
                    self.dbapi_connection = connection = pool._invoke_creator(self)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/create.py", line 578, in connect
                    return dialect.connect(*cargs, **cparams)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 598, in connect
                    return self.dbapi.connect(*cargs, **cparams)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/pymysql/connections.py", line 353, in __init__
                    self.connect()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/pymysql/connections.py", line 633, in connect
                    self._request_authentication()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/pymysql/connections.py", line 907, in _request_authentication
                    auth_packet = self._read_packet()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/pymysql/connections.py", line 725, in _read_packet
                    packet.raise_for_error()
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error
                    err.raise_mysql_exception(self._data)
                  File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
                    raise errorclass(errno, errval)
                sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1102, "Incorrect database name 'mariadb/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app.db'")
                (Background on this error at: https://sqlalche.me/e/14/f405)


                Ma première question est donc la suivante : 
                - comment puis-je corriger cette erreur ? (j'ai compris (si je me plante pas) que cela viens du nom de la base de donnée mais j'ignore comment corriger malgrès mes recherches)

                La seconde concerne l'id : 

                - dans le cours : https://openclassrooms.com/fr/courses/4425066-concevez-un-site-avec-flask/4525912-ajoutez-une-nouvelle-table-dans-la-base-de-donnees

                il est noté : id = db.Column(db.Integer, primary_key=True)

                Je souhaiterais que l'id soit la clé primaire mais aussi autoincrémenté
                Comment puis-je faire ?
                merci
                • Partager sur Facebook
                • Partager sur Twitter

                Merci à tous. Vous pouvez me retrouver ici :

                🌐 Visitez mon profil sur Comeup

                🚀 Découvrez BeFreelancr

                📱 Retrouvez-moi sur LinkedIn

                  12 octobre 2022 à 12:57:19

                  Comme il s'agit d'une base mariadb, on s'y connecte via une adresse IP + port + nom de la base (pas du fichier)

                  Le problème est ta ligne 5 de config.py (je n'y avais pas prêté attention)

                  SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:toto@127.0.0.1:3306/mariadb' + os.path.join(basedir, 'app.db')

                  il contient un nom de fichier (valable pour sqlite); donc correction:

                  SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:toto@127.0.0.1:3306/mariadb'

                  si tu as nommé ta base mariadb

                  Pour l'autoincrement, tu as toi même rajouté le bon paramètre, mais SQLAlchemy le met pour la 1ere colonne clé primaire de type entier

                  https://docs.sqlalchemy.org/en/14/dialects/mysql.html#auto-increment-behavior 

                  When creating tables, SQLAlchemy will automatically set AUTO_INCREMENT on the first Integer primary key column which is not marked as a foreign key




                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 octobre 2022 à 13:48:14

                    umfred a écrit:

                    Comme il s'agit d'une base mariadb, on s'y connecte via une adresse IP + port + nom de la base (pas du fichier)

                    Le problème est ta ligne 5 de config.py (je n'y avais pas prêté attention)

                    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:toto@127.0.0.1:3306/mariadb' + os.path.join(basedir, 'app.db')

                    il contient un nom de fichier (valable pour sqlite); donc correction:

                    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:toto@127.0.0.1:3306/mariadb'

                    si tu as nommé ta base mariadb

                    Pour l'autoincrement, tu as toi même rajouté le bon paramètre, mais SQLAlchemy le met pour la 1ere colonne clé primaire de type entier

                    https://docs.sqlalchemy.org/en/14/dialects/mysql.html#auto-increment-behavior 

                    When creating tables, SQLAlchemy will automatically set AUTO_INCREMENT on the first Integer primary key column which is not marked as a foreign key


                    Merci 

                    Effectivement ça a été un mélange de sqlite et et mariadb ...

                    Donc cette ligne : 

                    basedir = os.path.abspath(os.path.dirname(__file__))

                    Je peux l'enlever ? elle sert à rien ....


                    Pour l'id, je peux juste mettre : 

                    id = db.Column(db.Integer)

                    Enfin, si j'ai bien tout compris



                    Cependant, si j'écris juste : 

                    id = db.Column(db.Integer)

                    j'ai l'erreur suivante : 

                    ligne terminal : FLASK_APP=run.py flask shell
                    
                    erreur : 2022-10-12 14:03:32,314 INFO sqlalchemy.engine.Engine SELECT DATABASE()
                    2022-10-12 14:03:32,315 INFO sqlalchemy.engine.Engine [raw sql] {}
                    2022-10-12 14:03:32,316 INFO sqlalchemy.engine.Engine SELECT @@sql_mode
                    2022-10-12 14:03:32,316 INFO sqlalchemy.engine.Engine [raw sql] {}
                    2022-10-12 14:03:32,317 INFO sqlalchemy.engine.Engine SELECT @@lower_case_table_names
                    2022-10-12 14:03:32,317 INFO sqlalchemy.engine.Engine [raw sql] {}
                    2022-10-12 14:03:32,319 INFO sqlalchemy.engine.Engine SHOW FULL TABLES FROM `crypto_tracker`
                    2022-10-12 14:03:32,319 INFO sqlalchemy.engine.Engine [raw sql] {}
                    ['User']
                    Traceback (most recent call last):
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/bin/flask", line 8, in <module>
                        sys.exit(main())
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 1047, in main
                        cli.main()
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1055, in main
                        rv = self.invoke(ctx)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
                        return _process_result(sub_ctx.command.invoke(sub_ctx))
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
                        return ctx.invoke(self.callback, **ctx.params)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 760, in invoke
                        return __callback(*args, **kwargs)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/decorators.py", line 26, in new_func
                        return f(get_current_context(), *args, **kwargs)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 354, in decorator
                        app = __ctx.ensure_object(ScriptInfo).load_app()
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 308, in load_app
                        app = locate_app(import_name, name)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 218, in locate_app
                        __import__(module_name)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/run.py", line 1, in <module>
                        import app
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/__init__.py", line 3, in <module>
                        from . import models
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/models.py", line 8, in <module>
                        class User(db.Model):
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask_sqlalchemy/model.py", line 99, in __init__
                        super().__init__(name, bases, d, **kwargs)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask_sqlalchemy/model.py", line 119, in __init__
                        super().__init__(name, bases, d, **kwargs)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/orm/decl_api.py", line 76, in __init__
                        _as_declarative(reg, cls, dict_)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/orm/decl_base.py", line 126, in _as_declarative
                        return _MapperConfig.setup_mapping(registry, cls, dict_, None, {})
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/orm/decl_base.py", line 183, in setup_mapping
                        return cfg_cls(registry, cls_, dict_, table, mapper_kw)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/orm/decl_base.py", line 335, in __init__
                        self._early_mapping(mapper_kw)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/orm/decl_base.py", line 215, in _early_mapping
                        self.map(mapper_kw)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/orm/decl_base.py", line 1047, in map
                        mapper_cls(self.cls, self.local_table, **self.mapper_args),
                      File "<string>", line 2, in __init__
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/util/deprecations.py", line 309, in warned
                        return fn(*args, **kwargs)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/orm/mapper.py", line 693, in __init__
                        self._configure_pks()
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/sqlalchemy/orm/mapper.py", line 1383, in _configure_pks
                        raise sa_exc.ArgumentError(
                    sqlalchemy.exc.ArgumentError: Mapper mapped class User->users could not assemble any primary key columns for mapped table 'users'


                    Mais si j'écris ceci : 

                    id = db.Column(db.Integer, primary_key = True)

                    j'obtient l'erreur suivante : 

                    ligne dans terminal : FLASK_APP=run.py flask shell
                    
                    erreur : 2022-10-12 14:04:29,153 INFO sqlalchemy.engine.Engine SELECT DATABASE()
                    2022-10-12 14:04:29,153 INFO sqlalchemy.engine.Engine [raw sql] {}
                    2022-10-12 14:04:29,154 INFO sqlalchemy.engine.Engine SELECT @@sql_mode
                    2022-10-12 14:04:29,154 INFO sqlalchemy.engine.Engine [raw sql] {}
                    2022-10-12 14:04:29,155 INFO sqlalchemy.engine.Engine SELECT @@lower_case_table_names
                    2022-10-12 14:04:29,155 INFO sqlalchemy.engine.Engine [raw sql] {}
                    2022-10-12 14:04:29,157 INFO sqlalchemy.engine.Engine SHOW FULL TABLES FROM `crypto_tracker`
                    2022-10-12 14:04:29,157 INFO sqlalchemy.engine.Engine [raw sql] {}
                    ['User']
                    Traceback (most recent call last):
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/bin/flask", line 8, in <module>
                        sys.exit(main())
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 1047, in main
                        cli.main()
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1055, in main
                        rv = self.invoke(ctx)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
                        return _process_result(sub_ctx.command.invoke(sub_ctx))
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
                        return ctx.invoke(self.callback, **ctx.params)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 760, in invoke
                        return __callback(*args, **kwargs)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/decorators.py", line 26, in new_func
                        return f(get_current_context(), *args, **kwargs)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 354, in decorator
                        app = __ctx.ensure_object(ScriptInfo).load_app()
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 308, in load_app
                        app = locate_app(import_name, name)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 218, in locate_app
                        __import__(module_name)
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/run.py", line 1, in <module>
                        import app
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/__init__.py", line 3, in <module>
                        from . import models
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/models.py", line 24, in <module>
                        db.create_all()
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask_sqlalchemy/extension.py", line 868, in create_all
                        self._call_for_binds(bind_key, "create_all")
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask_sqlalchemy/extension.py", line 839, in _call_for_binds
                        engine = self.engines[key]
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask_sqlalchemy/extension.py", line 628, in engines
                        app = current_app._get_current_object()  # type: ignore[attr-defined]
                      File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/werkzeug/local.py", line 513, in _get_current_object
                        raise RuntimeError(unbound_message) from None
                    RuntimeError: Working outside of application context.
                    
                    This typically means that you attempted to use functionality that needed
                    the current application. To solve this, set up an application context
                    with app.app_context(). See the documentation for more information.

                    Donc, que dois-je faire ?

                    Merci

                    -
                    Edité par AdServ 12 octobre 2022 à 14:09:32

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Merci à tous. Vous pouvez me retrouver ici :

                    🌐 Visitez mon profil sur Comeup

                    🚀 Découvrez BeFreelancr

                    📱 Retrouvez-moi sur LinkedIn

                      12 octobre 2022 à 14:37:12

                      AdelineDesign64 a écrit:

                      Donc cette ligne : 

                      basedir = os.path.abspath(os.path.dirname(__file__))

                      Je peux l'enlever ? elle sert à rien ....

                      oui


                      Pour l'id, je peux juste mettre : 

                      id = db.Column(db.Integer)

                      Enfin, si j'ai bien tout compris



                      Cependant, si j'écris juste : 

                      id = db.Column(db.Integer)
                      Non car il faut que ce soit le 1er entier clé primaire pour que l'autoincrement soit mis automatiquement, comme indiqué dans la doc de précédente réponse, et d'où l'erreur que tu as, indiquant qu'il n'y a pas de clé primaire.


                      Mais si j'écris ceci : 

                      id = db.Column(db.Integer, primary_key = True)

                      j'obtient l'erreur suivante : 

                      ligne dans terminal : FLASK_APP=run.py flask shell
                      
                      erreur : 2022-10-12 14:04:29,153 INFO sqlalchemy.engine.Engine SELECT DATABASE()
                      2022-10-12 14:04:29,153 INFO sqlalchemy.engine.Engine [raw sql] {}
                      2022-10-12 14:04:29,154 INFO sqlalchemy.engine.Engine SELECT @@sql_mode
                      2022-10-12 14:04:29,154 INFO sqlalchemy.engine.Engine [raw sql] {}
                      2022-10-12 14:04:29,155 INFO sqlalchemy.engine.Engine SELECT @@lower_case_table_names
                      2022-10-12 14:04:29,155 INFO sqlalchemy.engine.Engine [raw sql] {}
                      2022-10-12 14:04:29,157 INFO sqlalchemy.engine.Engine SHOW FULL TABLES FROM `crypto_tracker`
                      2022-10-12 14:04:29,157 INFO sqlalchemy.engine.Engine [raw sql] {}
                      ['User']
                      Traceback (most recent call last):
                      [...]
                        File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/werkzeug/local.py", line 513, in _get_current_object
                          raise RuntimeError(unbound_message) from None
                      RuntimeError: Working outside of application context.
                      
                      This typically means that you attempted to use functionality that needed
                      the current application. To solve this, set up an application context
                      with app.app_context(). See the documentation for more information.

                      Donc, que dois-je faire ?


                      Comme indiqué à la fin du message, il semble que tu doives indiquer un contexte via app.app_context() https://flask.palletsprojects.com/en/2.2.x/appcontext/#manually-push-a-context

                      -
                      Edité par umfred 12 octobre 2022 à 14:51:25

                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 octobre 2022 à 14:59:40

                        bonjour

                        J'ai donc dans config.py, juste mis : 

                        import sqlalchemy
                        
                        SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:toto@127.0.0.1:3306/crypto_tracker'
                        

                        J'ai retiré tout le reste

                        pardon d'insisté pour l'id (mais je comprends pas très bien, je suis désolé).

                        Donc ce que je fais, c'est que j'écris : 

                        id = db.Column(db.Integer, primary_key = True)

                        et c'est suffisant, ou il faut que je rajoute l'auto increment ? (je comprends plus très bien désolé). Mais si j'ai bien compris, il faut que je précise chaque partie c'est bien cela (donc : id, integer, primary key et auto ingrement)

                        En regardant la lien (j'avais déja vue cette portion de code), je me dis que je dois changer dans views.py : 

                        app = Flask(__name__)

                        par :

                        def create_app():
                            app = Flask(__name__)
                        
                            with app.app_context():
                                init_db()
                        
                            return app

                        Mais lorsque j'ai essayé avant, cela n'a pas marché ... Enfin rien empèche de réessayer

                        ps : je viens de réessayer et le 

                        init_db()

                        n'est pas reconnu.

                        -
                        Edité par AdServ 12 octobre 2022 à 15:05:18

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Merci à tous. Vous pouvez me retrouver ici :

                        🌐 Visitez mon profil sur Comeup

                        🚀 Découvrez BeFreelancr

                        📱 Retrouvez-moi sur LinkedIn

                          12 octobre 2022 à 15:18:55

                          When creating tables, SQLAlchemy will automatically set AUTO_INCREMENT on the first Integer primary key column which is not marked as a foreign key

                          ça me semble explicite: à la création des tables, SQLAchemy ajoute automatiquement AUTO_INCREMENT sur la 1ère colonne clé primaire et de type entier qui n'est pas marqué comme clé étrangère

                          donc si id est la 1ere colonne de type entier ET clé primaire, il n'est pas obligatoire de mettre le paramètre autoincrement=true pour qu'elle soit en autoincrément (puisque c'est fait automatiquement); a contrario, si on ne veut pas qu'elle soit en auto increment, il faut spécifié autoincrement=true en paramètre.

                          init_db() fait appel à une fonction de ce nom, qui, a priori, n'existe pas. Celle qui peut y ressembler me semble être db.create_all() de models

                          Je me demande aussi si l'erreur

                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 octobre 2022 à 15:29:33

                            umfred a écrit:

                            When creating tables, SQLAlchemy will automatically set AUTO_INCREMENT on the first Integer primary key column which is not marked as a foreign key

                            ça me semble explicite: à la création des tables, SQLAchemy ajoute automatiquement AUTO_INCREMENT sur la 1ère colonne clé primaire et de type entier qui n'est pas marqué comme clé étrangère

                            donc si id est la 1ere colonne de type entier ET clé primaire, il n'est pas obligatoire de mettre le paramètre autoincrement=true pour qu'elle soit en autoincrément (puisque c'est fait automatiquement); a contrario, si on ne veut pas qu'elle soit en auto increment, il faut spécifié autoincrement=true en paramètre.

                            init_db() fait appel à une fonction de ce nom, qui, a priori, n'existe pas. Celle qui peut y ressembler me semble être db.create_all() de models

                            Je me demande aussi si l'erreur

                            Désolé, mon but n'est pas d'agacer mais de comprendre ... Comme ce langage est nouveau pour moi, j'ai besoin d'un temps d'adaptation

                            Avec plus d'explications, j'ai compris pour l'id, merci beaucoup. Votre explication était plus clair que ce qui est écris.

                            d'accord, merci pour l'indication pour init_db(). Je vais regarder

                            merci pour tout

                            ps : j'ai réussi à corriger deux erreurs seules (pas mal pour une débutante, oui je sais je me jette des fleurs =) )

                            bref, plus sérieusement, je coince sur cet erreur : 

                            terminal : FLASK_APP=run.py flask shell
                            
                            erreur : Usage: flask shell [OPTIONS]
                            Try 'flask shell --help' for help.
                            
                            Error: While importing 'run', an ImportError was raised:
                            
                            Traceback (most recent call last):
                              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 218, in locate_app
                                __import__(module_name)
                              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/run.py", line 1, in <module>
                                import app
                              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/__init__.py", line 2, in <module>
                                from .views import app
                              File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/views.py", line 8, in <module>
                                from models import db
                            ModuleNotFoundError: No module named 'models'
                            


                            Je ne comprends pas pourquoi models posent soucis

                            -
                            Edité par AdServ 12 octobre 2022 à 15:41:47

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Merci à tous. Vous pouvez me retrouver ici :

                            🌐 Visitez mon profil sur Comeup

                            🚀 Découvrez BeFreelancr

                            📱 Retrouvez-moi sur LinkedIn

                              12 octobre 2022 à 15:34:43

                              Si jamais, un tuto de flask avec une base mysql https://codeloop.org/flask-tutorial-flask-sqlalchemy-with-mysql/ 

                              Dans celui-ci, la création (et l'ajout de données) est faite depuis un terminal python et non pas dans une partie du programme.

                              Je me demandais aussi si l'erreur ne pourrait pas être causé par le fait que la table est déjà créé (regarde ta base avec un phpmyadmin par exemple si la table existe ou pas, si oui, supprime la avant de recommencer)

                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 octobre 2022 à 15:54:46

                                umfred a écrit:

                                Si jamais, un tuto de flask avec une base mysql https://codeloop.org/flask-tutorial-flask-sqlalchemy-with-mysql/ 

                                Dans celui-ci, la création (et l'ajout de données) est faite depuis un terminal python et non pas dans une partie du programme.

                                Je me demandais aussi si l'erreur ne pourrait pas être causé par le fait que la table est déjà créé (regarde ta base avec un phpmyadmin par exemple si la table existe ou pas, si oui, supprime la avant de recommencer)


                                merci beaucoup pour le tuto =)

                                je vais le regarder

                                pour la table effectivement elle existe ds phpmyadmin. je vais la supprimer et réessayer

                                ps : je l'ai supprimer, cela ne fonctionne toujours pas.
                                toujours la même erreurs : 

                                from models import db
                                ModuleNotFoundError: No module named 'models'

                                En tout cas merci pour tout

                                sans toi, je serais toujours bloqué au départ =)

                                -
                                Edité par AdServ 12 octobre 2022 à 16:11:43

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Merci à tous. Vous pouvez me retrouver ici :

                                🌐 Visitez mon profil sur Comeup

                                🚀 Découvrez BeFreelancr

                                📱 Retrouvez-moi sur LinkedIn

                                  12 octobre 2022 à 16:29:48

                                  comme tu as mis .views, ça devrait être .models alors au niveau de l'import
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    12 octobre 2022 à 17:12:40

                                    umfred a écrit:

                                    comme tu as mis .views, ça devrait être .models alors au niveau de l'import


                                    Navré, mais je ne comprends pas.
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Merci à tous. Vous pouvez me retrouver ici :

                                    🌐 Visitez mon profil sur Comeup

                                    🚀 Découvrez BeFreelancr

                                    📱 Retrouvez-moi sur LinkedIn

                                      12 octobre 2022 à 18:12:42

                                        File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/__init__.py", line 2, in <module>
                                          from .views import app
                                        File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/views.py", line 8, in <module>
                                          from models import db
                                      on voit qu'il y a .views dans __init__.py, et qu'il y a models dans views.py, et on voit que le "from .views import app" fonctionne car la ligne d'après on est dans le fichier views.py; donc dans views.py, mettre "from .models import db" à la place de "from models import db"
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        12 octobre 2022 à 20:28:57

                                        Bonsoir

                                        Merci pour l'aide précieuse que vous m'avez apporté tout au long de la journée
                                        Je vous suis très reconnaissante.

                                        J'ai encore une erreur (j'ai essayé et réussi à régler d'autre erreur), mais celle-ci ... Je ne comprends pas ...

                                        FLASK_APP=run.py flask shell
                                        Traceback (most recent call last):
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/bin/flask", line 8, in <module>
                                            sys.exit(main())
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 1047, in main
                                            cli.main()
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1055, in main
                                            rv = self.invoke(ctx)
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
                                            return _process_result(sub_ctx.command.invoke(sub_ctx))
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
                                            return ctx.invoke(self.callback, **ctx.params)
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/core.py", line 760, in invoke
                                            return __callback(*args, **kwargs)
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/click/decorators.py", line 26, in new_func
                                            return f(get_current_context(), *args, **kwargs)
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 354, in decorator
                                            app = __ctx.ensure_object(ScriptInfo).load_app()
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 308, in load_app
                                            app = locate_app(import_name, name)
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask/cli.py", line 218, in locate_app
                                            __import__(module_name)
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/run.py", line 1, in <module>
                                            from app import app
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/__init__.py", line 4, in <module>
                                            from .views import app
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/views.py", line 8, in <module>
                                            from .models import db
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/app/models.py", line 17, in <module>
                                            db = SQLAlchemy(app)
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask_sqlalchemy/extension.py", line 219, in __init__
                                            self.init_app(app)
                                          File "/opt/lampp/htdocs/studi/Le_développement_une_solution_digitale/crypto_tracker/venv/lib/python3.10/site-packages/flask_sqlalchemy/extension.py", line 252, in init_app
                                            app.extensions["sqlalchemy"] = self
                                        AttributeError: partially initialized module 'app' has no attribute 'extensions' (most likely due to a circular import)

                                        J'ai essayé de me débrouiller mais la je comprends pas ce qui ce passe

                                        merci et bonne soirée

                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Merci à tous. Vous pouvez me retrouver ici :

                                        🌐 Visitez mon profil sur Comeup

                                        🚀 Découvrez BeFreelancr

                                        📱 Retrouvez-moi sur LinkedIn

                                          13 octobre 2022 à 10:53:29

                                          il faudrait voir les import que tu as fait dans tes différents fichiers, il y en a qui se rebouclent probablement (qui s'appelle l'un l'autre = circular import)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            13 octobre 2022 à 14:30:45

                                            umfred a écrit:

                                            il faudrait voir les import que tu as fait dans tes différents fichiers, il y en a qui se rebouclent probablement (qui s'appelle l'un l'autre = circular import)


                                            D'accord merci.

                                            Hier, après réflexion, j'ai plus ou moins compris ce que tu viens de m'expliquer.

                                            J'ai essayé de trouver d'ou viens le soucis, mais ... je ne trouve pas.

                                            voici le lien de gitlab du projet, ce sera plus simple : https://gitlab.com/adeline64/crypto_tracker

                                            je vais continuer de chercher et merci en tout cas

                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            Merci à tous. Vous pouvez me retrouver ici :

                                            🌐 Visitez mon profil sur Comeup

                                            🚀 Découvrez BeFreelancr

                                            📱 Retrouvez-moi sur LinkedIn

                                              13 octobre 2022 à 17:32:23

                                              je crois qu'il faut que tu supprimes le import app de views.py
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                13 octobre 2022 à 18:15:58

                                                umfred a écrit:

                                                je crois qu'il faut que tu supprimes le import app de views.py


                                                Merci pour votre aide.

                                                En fait j'ai retiré tout le code que j'avais mis en commentaire, ainsi que tous les import ne servant à rien.

                                                Le code étant propre, le soucis c'est résolu de lui même (enfin pour l'instant, jusqu'au prochain soucis ...)

                                                ps : nouveau soucis arrivé

                                                bon par contre, j'ai une erreur bizarre : 

                                                ligne commande : FLASK_APP=run.py flask init_db
                                                
                                                
                                                
                                                erreur : 
                                                
                                                Usage: flask [OPTIONS] COMMAND [ARGS]...
                                                
                                                Try 'flask --help' for help.
                                                
                                                
                                                
                                                Error: No such command 'init_db'.


                                                je vais mettre gitlab à jour

                                                -
                                                Edité par AdServ 13 octobre 2022 à 18:49:02

                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Merci à tous. Vous pouvez me retrouver ici :

                                                🌐 Visitez mon profil sur Comeup

                                                🚀 Découvrez BeFreelancr

                                                📱 Retrouvez-moi sur LinkedIn

                                                Utilisation de flask et création 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