#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 самостоятельно, а это не так. Я также попытался создать его сам, но получил ту же ошибку.