Issue
I am learning flask-login package. When I run flask db init
, I don't get any errors. But this is the error i get when i run flask db migrate -m "creating users"
:
Traceback (most recent call last):
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\Padma Jain\AppData\Local\Programs\Python\Python37\Scripts\flask.exe\__main__.py", line 7, in <module>
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\flask\cli.py", line 967, in main
cli.main(args=sys.argv[1:], prog_name="python -m flask" if as_module else None)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\flask\cli.py", line 586, in main
return super(FlaskGroup, self).main(*args, **kwargs)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\click\core.py", line 782, in main
rv = self.invoke(ctx)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\click\core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\click\core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\click\core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\click\core.py", line 610, in invoke
return callback(*args, **kwargs)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\click\decorators.py", line 21, in new_func
return f(get_current_context(), *args, **kwargs)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\flask\cli.py", line 426, in decorator
return __ctx.invoke(f, *args, **kwargs)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\click\core.py", line 610, in invoke
return callback(*args, **kwargs)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\flask_migrate\cli.py", line 92, in migrate
rev_id, x_arg)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\flask_migrate\__init__.py", line 96, in wrapped
f(*args, **kwargs)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\flask_migrate\__init__.py", line 212, in migrate
version_path=version_path, rev_id=rev_id)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\alembic\command.py", line 212, in revision
script_directory.run_env()
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\alembic\script\base.py", line 490, in run_env
util.load_python_file(self.dir, "env.py")
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\alembic\util\pyfiles.py", line 97, in load_python_file
module = load_module_py(module_id, path)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\alembic\util\compat.py", line 182, in load_module_py
spec.loader.exec_module(module)
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "migrations\env.py", line 25, in <module>
str(current_app.extensions['migrate'].db.engine.url).replace('%', '%%'))
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\flask_sqlalchemy\__init__.py", line 943, in engine
return self.get_engine()
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\flask_sqlalchemy\__init__.py", line 962, in get_engine
return connector.get_engine()
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\flask_sqlalchemy\__init__.py", line 554, in get_engine
sa_url = make_url(uri)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\sqlalchemy\engine\url.py", line 229, in make_url
return _parse_rfc1738_args(name_or_url)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\sqlalchemy\engine\url.py", line 288, in _parse_rfc1738_args
return URL(name, **components)
File "c:\users\padma jain\appdata\local\programs\python\python37\lib\site-packages\sqlalchemy\engine\url.py", line 71, in __init__
self.port = int(port)
ValueError: invalid literal for int() with base 10: '\\Users\\Padma Jain\\python\\flask\\flask_login\\app\\data.sqlite'
Here is my app.py
# app.py
from app import app, db
from flask import render_template, flash, redirect, request, url_for
from flask_login import login_user, logout_user, login_required
from app.models import User
from app.forms import RegistrationForm, LoginForm
@app.route("/")
def home():
return render_template("index.html")
@app.route("/welcome")
@login_required
def welcome_user():
return render_template("welcome-user.html")
@app.route("/logout")
@login_required
def logout():
logout_user()
flash("Logged out successfully")
return redirect(url_for('home'))
@app.route("/login", methods = ["GET", "POST"])
def login():
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(email=form.email.data).first()
if user.check_password(form.password.data) and user is not None:
login_user(user)
flash("Logged in successfully!")
next = request.args.get("next")
if next == None or not next[0] == '/':
next = url_for('welcome_user')
return redirect(next)
return render_template("login.html",form=form)
@app.route("/register",methods=["GET","POST"])
def register():
form = RegistrationForm()
if form.validate_on_submit():
user = User(email=form.email.data,
username=form.username.data,
password=form.password.data)
db.session.add(user)
db.session.commit()
flash("Created account successfully")
return redirect(url_for('login'))
return render_template("register.html")
if __name__ == "__main__":
app.run(debug=True)
init.py:
# __init__.py
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager
login_manager = LoginManager()
app = Flask(__name__)
app.config['SECRET_KEY'] = 'thisismysecretkeydontstealit'
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://' + os.path.join(basedir,'data.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
Migrate(app, db)
login_manager.init_app(app)
login_manager.login_view = 'login'
models.py
# models.py
from app import db, login_manager
from werkzeug.security import generate_password_hash, check_password_hash
from flask_login import UserMixin
@login_manager.user_loader
def load_user(user_id):
return User.query.get(user_id)
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key = True)
email = db.Column(db.String(64),unique = True, index = True)
username = db.Column(db.String(64), unique=True, index=True)
password_hash = db.Column(db.String(128))
def __init__(self):
self.email = email
self.username = username
self.password_hash = generate_password_hash(password)
def check_password(self):
return check_password_hash(self.check_password_hash, password)
Please help me
Solution
It looks like you have an incorrect database URL. If I'm not mistaken, Flask login uses the SQLAlchemy python framework under the hood to connect to databases, so your URL should satisfy the format described in the SQLAlchemy's documentation
Try replacing the line
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://' + os.path.join(basedir,'data.sqlite')
with
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite+pysqlite:///' + os.path.join(basedir,'data.sqlite')
Answered By - Kolay.Ne
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.