#python #python-3.x #sqlite #sqlalchemy #web-deployment-project
Вопрос:
Я пытаюсь создать простой веб-сайт форумов с помощью учебника, и я собираюсь создать базу данных для этого сайта. Тем не менее, я всегда получаю недопустимую ошибку URL-адреса SQLite, когда пытаюсь сделать это с помощью db.create_all(). Я абсолютный новичок в этом деле, поэтому мне действительно понадобится помощь. 🙁 Я думаю, что это в основном связано с этим кодом
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///slisff.db'
Попробовал добавить косые черты, вставить фактический адрес моего проекта/venv, ничего. Оба пытались использовать cmd и pycharm, но все равно безуспешно. Я использую ноутбук с Windows и PyCharm.
from flask import Flask, render_template, request, redirect, url_for, session, flash
from forms import RegistrationForm, LoginForm
import sqlite3
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
# from flask_login import LoginManager
#
# login_manager = LoginManager()
app = Flask(__name__)
#Protect Against Cookie Modification
app.config['SECRET_KEY'] = 'f9a2fd8f07fae783cf24ae35997a2a7c'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///slisff.db'
db = SQLAlchemy(app)
#Unique ID for each user/entry in the user database
#User Info Class
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(25), unique=True, nullable=False)
email = db.Column(db.String(50), unique=True, nullable=False)
prof_pic = db.Column(db.String(20), nullable=False, default='default.jpg')
password = db.Column(db.String(60), nullable=False)
#shows relationship of posts made to a single author that wrote them, backref is adding pseudo column to post model
posts = db.relationship('Post', backref='author', lazy=True)
#How our user object (info) will be printed
def __repr__(self):
return f"User('{self.username}', '{self.email}', '{self.prof_pic}')"
#Class for posts made in the Freedom Forums
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(90), nullable=False)
date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
content = db.Column(db.Text, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
def __repr__(self):
return f"Post('{self.title}', '{self.date_posted}')"
Это сообщение об ошибке, которое я получаю.
>>> db.create_all()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:UsersFrancoisDesktopLIS 161SLISForumsvenvlibsite-packagesflask_sqlalchemy__init__.py", line 109
4, in create_all
self._execute_for_all_tables(app, bind, 'create_all')
File "C:UsersFrancoisDesktopLIS 161SLISForumsvenvlibsite-packagesflask_sqlalchemy__init__.py", line 108
6, in _execute_for_all_tables
op(bind=self.get_engine(app, bind), **extra)
File "C:UsersFrancoisDesktopLIS 161SLISForumsvenvlibsite-packagesflask_sqlalchemy__init__.py", line 101
7, in get_engine
return connector.get_engine()
File "C:UsersFrancoisDesktopLIS 161SLISForumsvenvlibsite-packagesflask_sqlalchemy__init__.py", line 594
, in get_engine
self._engine = rv = self._sa.create_engine(sa_url, options)
File "C:UsersFrancoisDesktopLIS 161SLISForumsvenvlibsite-packagesflask_sqlalchemy__init__.py", line 102
7, in create_engine
return sqlalchemy.create_engine(sa_url, **engine_opts)
File "<string>", line 2, in create_engine
File "C:UsersFrancoisDesktopLIS 161SLISForumsvenvlibsite-packagessqlalchemyutildeprecations.py", line
298, in warned
return fn(*args, **kwargs)
File "C:UsersFrancoisDesktopLIS 161SLISForumsvenvlibsite-packagessqlalchemyenginecreate.py", line 564, in create_engine
(cargs, cparams) = dialect.create_connect_args(u)
File "C:UsersFrancoisDesktopLIS 161SLISForumsvenvlibsite-packagessqlalchemydialectssqlitepysqlite.py", line 545, in create_connect_args
raise exc.ArgumentError(
sqlalchemy.exc.ArgumentError: Invalid SQLite URL: sqlite://site.db
Valid SQLite URL forms are:
sqlite:///:memory: (or, sqlite://)
sqlite:///relative/path/to/file.db
sqlite:////absolute/path/to/file.db
Комментарии:
1. Находится
slisff.db
в том же каталоге, что и ваше приложение flask ? Если нет, убедитесь, что путь указан правильно, потому что с учетом значения'sqlite:///slisff.db'
вы считаете, что ваша база данных находится в том же каталоге.2. Так и должно быть. Но спасибо вам, теперь все решено. Я знаю, что произошло, но я только что перезапустил PyCharm, и это сработало на удивление