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) :
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)
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)
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'
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 )
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
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)
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)
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.
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.
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
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
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'
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)
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'
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"
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
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)
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.
× 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.
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
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"
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn
Merci à tous. Vous pouvez me retrouver ici :
🌐 Visitez mon profil sur Comeup
🚀 Découvrez BeFreelancr
📱 Retrouvez-moi sur LinkedIn