Python 烧瓶SQLAlchemy SQLAlchemy.exc.OperationalError无此类表格';漫画';

Python 烧瓶SQLAlchemy SQLAlchemy.exc.OperationalError无此类表格';漫画';,python,flask,sqlalchemy,Python,Flask,Sqlalchemy,我对炼金术有些问题 我有我的model.py文件 从应用程序导入应用程序,数据库 从配置导入(SQLALCHEMY_数据库_URI、SQLALCHEMY_ECHO、, SQLALCHEMY_轨道_修改) app.config['SQLALCHEMY\u DATABASE\u URI']=SQLALCHEMY\u DATABASE\u URI app.config['SQLALCHEMY\u TRACK\u MODIFICATIONS']=SQLALCHEMY\u TRACK\u MODIFICA

我对炼金术有些问题

我有我的model.py文件

从应用程序导入应用程序,数据库
从配置导入(SQLALCHEMY_数据库_URI、SQLALCHEMY_ECHO、,
SQLALCHEMY_轨道_修改)
app.config['SQLALCHEMY\u DATABASE\u URI']=SQLALCHEMY\u DATABASE\u URI
app.config['SQLALCHEMY\u TRACK\u MODIFICATIONS']=SQLALCHEMY\u TRACK\u MODIFICATION
app.config['SQLALCHEMY\u ECHO']=SQLALCHEMY\u ECHO
类漫画(数据库模型):
__tablename_uuu=‘漫画’
comicId=db.Column(db.Integer,主键=True)
comicName=db.Column(db.String(100),unique=True,nullable=False)
Comicautor=db.Column(db.String(100),unique=False,nullable=True)
comicPrice=db.Column(db.Numeric(20,2),unique=False,nullable=True)
comicDescription=db.Column(db.String(500),unique=False,nullable=True)
comicStatus=db.Column(db.String(50),unique=False,nullable=True)
comicImage=db.Column(db.String(250),unique=False,nullable=True)
def returnComic():
com.query.all()
类用户(db.Model):
__tablename_uu='User'
userId=db.Column(db.Integer,主键=True)
userName=db.Column(db.String(25),unique=True,nullable=False)
passWord=db.Column(db.String(10),null=False)
email=db.Column(db.String(25),unique=True,nullable=False)
类收藏夹(db.Model):
__tablename_uuu='Favorite'
userId=db.Column(db.Integer,db.ForeignKey('user.userId'),nullable=False,primary_key=True)
comicId=db.Column(db.Integer,db.ForeignKey('comic.comicId'),null=False)
在我的app.py文件中,我有我的所有路线

从烧瓶导入烧瓶,渲染\u模板
从flask_引导导入引导
从flask_sqlalchemy导入sqlalchemy
导入模型
app=烧瓶(名称)
引导=引导(应用程序)
db=SQLAlchemy(应用程序)
@应用程序路径(“/”)
def index():
结果=model.Comic.returnComic()
返回渲染模板(“index.html”,results=results)
@应用程序路径(“/概述”)
def概述(第1页):
results=db.session.query(漫画).all()
返回渲染模板(“overview.html”,results=results)
@app.route(“/overview/details”)
def details():
返回渲染模板(“detail.html”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
db.create_all()
app.run(debug=True)
我还有一个config.py文件

SQLALCHEMY\u数据库\u URI=“mysql+pymysql://root:@本地主机/刮板”
SQLALCHEMY\u TRACK\u MODIFICATION=False
SQLALCHEMY_ECHO=True
在执行索引路径时会出现错误,我希望在HTML文件中显示数据库中的一些数据,但它会提供堆栈跟踪


sqlalchemy.exc.OperationalError

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: Comic
[SQL: SELECT "Comic"."comicId" AS "Comic_comicId", "Comic"."comicName" AS "Comic_comicName", "Comic"."comicAuthor" AS "Comic_comicAuthor", "Comic"."comicPrice" AS "Comic_comicPrice", "Comic"."comicDescription" AS "Comic_comicDescription", "Comic"."comicStatus" AS "Comic_comicStatus", "Comic"."comicImage" AS "Comic_comicImage" 
FROM "Comic"]
(Background on this error at: http://sqlalche.me/e/e3q8)
Traceback (most recent call last)

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1283, in _execute_context

    self.dialect.do_execute(

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\sqlalchemy\engine\default.py", line 590, in do_execute

    cursor.execute(statement, parameters)

    The above exception was the direct cause of the following exception:
    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\flask\app.py", line 2464, in __call__

    return self.wsgi_app(environ, start_response)

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\flask\app.py", line 2450, in wsgi_app

    response = self.handle_exception(e)

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\flask\app.py", line 1867, in handle_exception

    reraise(exc_type, exc_value, tb)

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\flask\_compat.py", line 39, in reraise

    raise value

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\flask\app.py", line 2447, in wsgi_app

    response = self.full_dispatch_request()

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\flask\app.py", line 1952, in full_dispatch_request

    rv = self.handle_user_exception(e)

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\flask\app.py", line 1821, in handle_user_exception

    reraise(exc_type, exc_value, tb)

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\flask\_compat.py", line 39, in reraise

    raise value

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\flask\app.py", line 1950, in full_dispatch_request

    rv = self.dispatch_request()

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\flask\app.py", line 1936, in dispatch_request

    return self.view_functions[rule.endpoint](**req.view_args)

    File "C:\laragon\www\Proftaak\app.py", line 12, in index

    results = model.Comic.returnComic()

    File "C:\laragon\www\Proftaak\model.py", line 21, in returnComic

    Comic.query.all()

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\sqlalchemy\orm\query.py", line 3319, in all

    return list(self)

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\sqlalchemy\orm\query.py", line 3481, in __iter__

    return self._execute_and_instances(context)

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\sqlalchemy\orm\query.py", line 3506, in _execute_and_instances

    result = conn.execute(querycontext.statement, self._params)

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1020, in execute

    return meth(self, multiparams, params)

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 298, in _execute_on_connection

    return connection._execute_clauseelement(self, multiparams, params)

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1133, in _execute_clauseelement

    ret = self._execute_context(

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1323, in _execute_context

    self._handle_dbapi_exception(

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1517, in _handle_dbapi_exception

    util.raise_(

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\sqlalchemy\util\compat.py", line 178, in raise_

    raise exception

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1283, in _execute_context

    self.dialect.do_execute(

    File "C:\laragon\www\Proftaak\.venv\Lib\site-packages\sqlalchemy\engine\default.py", line 590, in do_execute

    cursor.execute(statement, parameters)

    sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: Comic
    [SQL: SELECT "Comic"."comicId" AS "Comic_comicId", "Comic"."comicName" AS "Comic_comicName", "Comic"."comicAuthor" AS "Comic_comicAuthor", "Comic"."comicPrice" AS "Comic_comicPrice", "Comic"."comicDescription" AS "Comic_comicDescription", "Comic"."comicStatus" AS "Comic_comicStatus", "Comic"."comicImage" AS "Comic_comicImage" 
    FROM "Comic"]
    (Background on this error at: http://sqlalche.me/e/e3q8)
现在我在谷歌上搜索了一下,问题似乎在于,在制作模型之前先查询数据库


还应该在我使用flask run时重新创建数据库吗?

为记录添加答案:

您需要迁移数据库,以便它具有您要查询的表

  • 确保为flask设置了SQLALCHEMY_数据库_URI:

    export SQLALCHEMY_DATABASE_URI="mysql+pymysql://root:@localhost/scraper"
    
  • 确保flask可以看到你的应用程序

    export FLASK_APP=path-to_your_app:app #might also be main or wsgi if you are using that
    
  • 准备迁移文件:

    flask db migrate -m 'starting database'
    
    这将在migrations/versions中创建一个文件,类似于4232HG44242GV244242_start_database.py,c检查它是否执行了您希望它执行的操作(创建表等)

  • 运行迁移(一次,这会将数据库中的alembic_版本设置为4232HG44242GV244242[迁移文件的前缀],它将用于跟踪数据库的迁移情况[这意味着您可以升级或降级,并且在不同的点上有多个数据库,它们可以很容易地进行迁移])


  • 完成后,启动应用程序并重试。

    您需要迁移,运行flask db migrate-m“创建新模型”,将在迁移/版本中创建文件,然后运行fladk db Upgrade。我使用flask run时,它是否应该重新创建数据库?不,数据库是持久的,这就是为什么您需要正确处理迁移,第一次创建它时flsk会理解它是空的,并编写SQL来创建那些表。您的数据库不存在:)您正在设置SQLALCHEMY_数据库_URI吗?如果您在配置中有它,请尝试导出SQLALCHEMY_数据库_URI=YOURURI(在unix上)另外,请检查您是否设置了FLASK_APP变量,我不记得它是如何获得配置的,这在Begging中有点麻烦,但您会发现问题的症结所在您的工作进展顺利,如果FLASK ddb migrate没有抛出任何错误,那么请检查迁移/版本您应该有一个以奇怪字符串开头的文件,其中包含要迁移的代码,无需触摸,只需运行flask db升级即可
    flask db upgrade