簡體   English   中英

ValueError: int() 以 10 為底的無效文字:'\\Users\\Padma Jain\\python\\flask\\flask_login\\app\\data.sqlite'

[英]ValueError: invalid literal for int() with base 10: '\\Users\\Padma Jain\\python\\flask\\flask_login\\app\\data.sqlite'

我正在學習燒瓶登錄 package。 當我運行flask db init時,我沒有收到任何錯誤。 但這是我在運行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'

這是我的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)

初始化.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)

請幫我

看起來您的數據庫 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

換線試試

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://' + os.path.join(basedir,'data.sqlite')

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite+pysqlite:///' + os.path.join(basedir,'data.sqlite')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM