Ошибка SQLAlchemy OperationalError нет такой таблицы — путаница с uri sqlite

#python #flask #sqlalchemy #flask-sqlalchemy

#python #flask #sqlalchemy #flask-sqlalchemy

Вопрос:

Помогите! Я действительно новичок в flask, и я путался со всеми учебниками, которые я мог найти, но я столкнулся с проблемой, которую я не могу понять.

Вот моя ошибка:

 sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: User
[SQL: SELECT "User"."userId" AS "User_userId", "User".email AS "User_email", "User".password AS "User_password", "User".username AS "User_username", "User".lastlogin AS "User_lastlogin", "User".isauthenticated AS "User_isauthenticated" 
FROM "User" 
WHERE "User".email = ?
 LIMIT ? OFFSET ?]
[parameters: ('test@example.com', 1, 0)]
(Background on this error at: http://sqlalche.me/e/13/e3q8)
 

Итак, я работаю над формой регистрации и решил все остальные ошибки. Но вот что я могу понять из этой ошибки, так это то, что моя база данных или таблица не создаются.

Вот мой код:

init.py:

 import os
from flask import Flask, render_template, redirect, session
from flask_login import LoginManager
from flask_bcrypt import Bcrypt
from flask_sqlalchemy import SQLAlchemy
from werkzeug.utils import import_string
from complete.app import redirect_url

db = SQLAlchemy()
login_manager = LoginManager()

def create_app():
    """Create Flask application."""
    
    app = Flask(__name__, instance_relative_config=False)

    @app.context_processor
    def inject_global_vars():
        return dict(appname="Ebay Listing Viewer")

    app.config.from_pyfile('configfile.py')    

    db.init_app(app)
    login_manager.init_app(app)

    with app.app_context():

        from .userauth.auth import auth_bp
        app.register_blueprint(auth_bp)

        db.create_all()

        from .models import User

        @login_manager.user_loader
        def load_user(user_id):
            return User.get(user)
        
        return app
 

models.py:

 """Data Models"""
from flask_login import UserMixin
from . import db


class User(UserMixin, db.Model):
    __tablename__ = 'User'

    userid = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(100), unique=True)
    password = db.Column(db.String(200))
    username = db.Column(db.String(1000))
    lastlogin = db.Column(db.DateTime)
    isauthenticated = db.Column(db.Boolean, default=False)

    def is_active(self):
        return True

    def get_id(self):
        return chr(self.userId)

    def is_authenticated(self):
        return self.isauthenticated

    def is_anonymous(self):
        return False

    def __repr__(self):
        return '<User> {}'.format(self.username)

    def set_password(self, password):
        self.password = generate_password_hash(
            password,
            method='sha256'
        )
    
    def check_password(self, password):
        return check_password_hash(self.password, password)
 

config.py:

 class Config(object):
    """Base config."""
    SECRET_KEY = environ.get('SECRET_KEY')
    STATIC_FOLDER = 'static'
    TEMPLATES_FOLDER = 'templates'

class DevelopmentConfig(Config):
    FLASK_ENV = 'development'
    SQLALCHEMY_DATABASE_URI = environ.get('DEV_DATABASE_URI')
 

.env:

 #among other things...
DEV_DATABASE_URI=sqlite:///db.sqlite
 

В моей корневой папке есть файл с именем db.sqlite (т.Е. В том же каталоге, что и init.py ) но я не уверен, что в этом что-то есть. Когда я пытаюсь его открыть, он показывает The file is not displayed in the editor because it is either binary or uses an unsupported text encoding. (я использую VSCode).

Я не совсем уверен, как работает uri базы данных — у меня было много просмотров в Google, и все, кажется, думают, что это совершенно очевидно. Это путь к файлу моей базы данных? Я создаю файл базы данных или он создается автоматически?

Я думаю, что проблема, вероятно, заключается в том, что uri базы данных неверен, но я не знаю, у меня недостаточно опыта, поэтому, возможно, это что-то совершенно другое.

Спасибо, что нашли время, чтобы прочитать и помочь!

Комментарии:

1. Пожалуйста, поделитесь своим models.py досье. Вы создаете пользователя таблицы?

2. Я добавил код. Есть идеи, в чем проблема?

3. Пусть ваше приложение отображает (или регистрирует) значение, возвращаемое os.getcwd() . Это должна быть папка, в которой sqlite:///db.sqlite ожидается найти файл «db.sqlite». Это то, чего вы ожидаете?

4. Я не ожидаю, что это будет где угодно, потому что я очень новичок в Flask, но он находится в моем корневом каталоге, так что, я думаю, это правильное место …? Но я думал, что он должен создавать файл db.sqlite самостоятельно, а это не так. Я также попытался создать его сам, но получил ту же ошибку.