python - SQLAlchemy db.create_all() 错误,未创建数据库

标签 python sqlite flask sqlalchemy centos8

我坚持尝试按照 flask 教程创建数据库: https://www.youtube.com/watch?v=cYWiDiIUxQc&list=PL-osiE80TeTs4UjLw5MM6OjgkjFeUxCYH&index=4

我没有成功地寻找此问题的解决方案。请帮忙。

当我从项目导入数据库后尝试运行db.create_all()时,我得到

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file

Python 3.8.3

from datetime import datetime
from flask import Flask, render_template, url_for, flash, redirect
from flask_sqlalchemy import SQLAlchemy
from forms import RegistrationForm, LoginForm

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}', '{self.image_file}')"

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), 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 "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2339, in _wrap_pool_connect return fn() File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 364, in connect return _ConnectionFairy._checkout(self) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 778, in _checkout fairy = _ConnectionRecord.checkout(pool) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 495, in checkout rec = pool._do_get() File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/impl.py", line 239, in _do_get return self._create_connection() File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 309, in _create_connection return _ConnectionRecord(self) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 440, in init self.__connect(first_connect_check=True) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 661, in connect pool.logger.debug("Error on connect(): %s", e) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 68, in exit compat.raise( File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 178, in raise raise exception File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 656, in __connect connection = pool._invoke_creator(self) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/strategies.py", line 114, in connect return dialect.connect(*cargs, **cparams) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 493, in connect return self.dbapi.connect(*cargs, **cparams) sqlite3.OperationalError: unable to open database file

上述异常是导致以下异常的直接原因:

Traceback (most recent call last): File "", line 1, in File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/flask_sqlalchemy/init.py", line 1039, in create_all self._execute_for_all_tables(app, bind, 'create_all') File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/flask_sqlalchemy/init.py", line 1031, in _execute_for_all_tables op(bind=self.get_engine(app, bind), **extra) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/sql/schema.py", line 4546, in create_all bind._run_visitor( File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2097, in _run_visitor with self._optional_conn_ctx_manager(connection) as conn: File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/contextlib.py", line 113, in enter return next(self.gen) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2089, in _optional_conn_ctx_manager with self._contextual_connect() as conn: File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2305, in _contextual_connect self._wrap_pool_connect(self.pool.connect, None), File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2342, in _wrap_pool_connect Connection.handle_dbapi_exception_noconnection( File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1584, in handle_dbapi_exception_noconnection util.raise( File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 178, in raise raise exception File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2339, in _wrap_pool_connect return fn() File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 364, in connect return _ConnectionFairy._checkout(self) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 778, in _checkout fairy = _ConnectionRecord.checkout(pool) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 495, in checkout rec = pool._do_get() File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/impl.py", line 239, in _do_get return self._create_connection() File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 309, in _create_connection return _ConnectionRecord(self) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 440, in init self.__connect(first_connect_check=True) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 661, in connect pool.logger.debug("Error on connect(): %s", e) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 68, in exit compat.raise( File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 178, in raise raise exception File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 656, in __connect connection = pool._invoke_creator(self) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/strategies.py", line 114, in connect return dialect.connect(*cargs, **cparams) File "/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 493, in connect return self.dbapi.connect(*cargs, **cparams) sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file (Background on this error at: http://sqlalche.me/e/13/e3q8)

最佳答案

# I found this helpful    
>>> from project import app, db
>>> app.app_context().push()
>>> db.create_all()
#Flask-SQLAlchemy db.create_all() raises RuntimeError working outside of application context I hope you found a solution that worked for you

关于python - SQLAlchemy db.create_all() 错误,未创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62705340/

相关文章:

python - 想保存每个用户django的数据

java - 在 Android 应用程序上存储每条记录或一列的 BLOBS

c# - 知道元素是否已保存或更新 Nhibernate

python - 使用 Flask 和依赖注入(inject)运行 Celery

python - apache+wsgi网站如何设置LD_LIBRARY_PATH

python - 在对用户进行平均预测时附加标签信息

python - Django url 关键字

android - 如何在多个 Activity 中添加数据

python - Docker-compose无法找到Flask配置文件

javascript - 即使建立连接后,Flask socketio 也没有收到来自 javascript 的任何消息