当前位置: 首页 > 知识库问答 >
问题:

SQLAlchemy db.create_all()错误,未创建db

汲睿
2023-03-14

我无法按照flask教程创建数据库:https://www.youtube.com/watch?v=cywidiiuxqc&list=pl-osie80tets4ujlw5mm6ojgkjfeuxcyh&index=4

我没有找到解决这个问题的办法。请帮帮忙。

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

SqlAlchemy.exc.OperationalError:(Sqlite3.OperationalError)无法打开数据库文件

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()跟踪(最近一次调用):文件“/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/base.py”,第2339行,在_wrap_pool_connecthtml" target="_blank">返回fn()文件“/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py”,在connect返回_connectionfairy._checkout(asksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py“,第440行,在init self.__connect(First_connect_check=true)文件”/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py“,第661行,在connect pool.logger.debug(”connect()错误:%s“,e)文件”nnect return self.dbapi.connect(*cargs,**cparams)sqlite3.operationalerror:无法打开数据库文件

上述例外是下列例外的直接原因:

回溯(最近一次调用):文件“”,第1行,在文件“/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/flask_sqlalchemy/init.py”,第1039行,在create_all self._execute_for_all_tables(app,bind,'create_all')文件“/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/flask_sqlalchemy/init.pylf._contextual_connect()作为connn:文件“/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/base.py”,第2305行,in_contextual_connect(self.pool.connect,None);文件“/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/engine/base.py”,第2342行/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py“,第778行,in_checkout fairy=_connectionrecord.checkout(pool)文件”/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/pool/base.py“,第495行,incheckout rec=pool._do_get()文件”Lalchemy/util/langhelpers.py“,第68行,在exit compat.raise中(文件”/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/util/compat.py“,第178行,在raise中引发异常文件”/home/kbyrd/anaconda3/envs/flasksite/lib/python3.8/site-packages/sqlalchemy/base.py“,第656行,在__connect connection=

共有1个答案

南宫海超
2023-03-14

参考Miguel的精彩工作https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-database。也许您需要让应用程序知道basedir路径?注:他使用app.db而不是site.db。

import os
basedir = os.path.abspath(os.path.dirname(__file__))

class Config(object):
  # ...
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
    'sqlite:///' + os.path.join(basedir, 'app.db')
    SQLALCHEMY_TRACK_MODIFICATIONS = False

然后用

from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)

from app import routes, models

希望这能有一点帮助。

 类似资料:
  • 我正在尝试从AWS控制台在ECS Fargate环境中启动测试任务,但每次尝试启动时,都会出现以下错误: 执行角色创建AmazoneCaskExecutionRole失败 我认为这是权限错误,所以我要求帐户所有者(我是另一个帐户的IAM用户)给我它们,现在我这样做了,但仍然不起作用。 我目前的ECS权限是: AmazonECS\u FullAccess 亚马逊执行角色政策 最糟糕的是,AWS没有提

  • 用户 角色 Application.Properties

  • 我对JAVA web应用程序非常陌生,所以请记住这一点。我承担了一个非常大的项目,令人望而生畏。我终于修复了Maven依赖,现在在Tomcat上运行时遇到了第一个错误。 包含eu.digient.billfold.goshgame.game.level.ItemConfigFactoryImpl模块的Spring配置:

  • MySQL说:文档 1064年的今天,您的SQL语法出现错误;查看与您的MariaDB服务器版本对应的手册,了解第2行“@id INT AS BEGIN SET NO COUNT ON”附近使用的正确语法

  • 代码: 导致"ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()” 有什么问题?

  • 问题内容: 我将我的MySQL数据库插入WAMP服务器时遇到了麻烦。我打算发布模式的图像,但这是我不能的第一篇文章。 下面是执行的脚本。 但是然后我得到这个错误: 我不知道为什么。谁能帮我? 问题答案: 我迅速搜寻了你,它把我带到了这里。我引用: 如果您尝试添加名称已经在其他地方使用的约束,则会收到此消息 要检查约束,请使用以下SQL查询: 在此处查找更多信息,或尝试查看错误发生的位置。看起来像是