Python sqlalchemy.exc.OperationalError:(MySQLdb._exceptions.OperationalError)(1054,“字段列表”中的未知列“detail.id”)

Python sqlalchemy.exc.OperationalError:(MySQLdb._exceptions.OperationalError)(1054,“字段列表”中的未知列“detail.id”),python,python-3.x,flask,sqlalchemy,flask-sqlalchemy,Python,Python 3.x,Flask,Sqlalchemy,Flask Sqlalchemy,我建立了一个小网站,任何人都可以在其中存储“姓名、电子邮件、电话”,但当我从数据库中检索数据时,我发现了这个错误。我不知道为什么 我花了两天的时间来解决这个错误,但我还是被它缠住了 sqlalchemy.exc.OperationalError:MySQLdb.\u exceptions.OperationalError 1054,“字段列表”中的未知列“detail.id” [SQL:选择detail.id作为detail\u id,detail.name作为detail\u name,det

我建立了一个小网站,任何人都可以在其中存储“姓名、电子邮件、电话”,但当我从数据库中检索数据时,我发现了这个错误。我不知道为什么

我花了两天的时间来解决这个错误,但我还是被它缠住了

sqlalchemy.exc.OperationalError:MySQLdb.\u exceptions.OperationalError 1054,“字段列表”中的未知列“detail.id” [SQL:选择detail.id作为detail\u id,detail.name作为detail\u name,detail.email作为detail\u email,detail.phone作为detail\u phone,detail.date作为detail\u date [来自细节] 有关此错误的背景信息,请访问:

我的代码run.py:

My index.html文件:

我期望:

如何从数据库中获取所有数据并通过循环将其放入index.html中

请让我明白,我哪里做错了?

了解错误 您看到此错误的原因是@moi提到您的模型和数据库不匹配

您的模型有五个属性id、姓名、电子邮件、电话和日期。但是,您的数据库在详细信息表中没有名为id的列

这在查询数据库时会导致错误,因为SQLAlchemy在SELECT语句中指定了它要查询的每一列。换句话说,它说它需要id、姓名、电子邮件、电话和日期列的数据。不幸的是,数据库没有名为id的列,因此它返回一个错误

这可能是由于您创建了没有id的模型,然后添加了它。因此,您更新了模型,而不是数据库

如何解决这个问题 您需要使数据库与模型同步。您需要从终端运行以下命令

首先,安装一个软件包

第二,配置迁移

为此,请至少阅读文档中的示例部分

第三,设置迁移文件夹

如果这会产生错误,则无法定位烧瓶应用程序。错误您需要设置FLASK\u APP环境变量。将run.py替换为Flask应用程序的文件名

MacOS/Linux

$ export FLASK_APP=run.py
窗户

$ set FLASK_APP=run.py
第四,创建第一次迁移

完成此操作后,您应该在/migrations/versions目录中找到一个新文件xxxxxxxxxx uuxx.py。这是一个Alembic迁移文件

在这一点上,您有三个选择

选项1:您可以删除详细信息表,让我们创建一个新的表。您将丢失其中的任何数据。然后运行升级命令

选项2:您可以手动编辑新的Alembic迁移文件。您需要更改upgrade函数,以便它不会尝试创建新的详细信息表,因为它已经存在,而是添加id列

选项3:您可以删除sa.Columnid sa.Integer。。。来自升级函数的行以及数据库中不存在的任何其他列。然后在数据库中手动创建一个名为alembic_version的表,其中包含一个主键VARCHAR列,名为version_num,长度为32。然后在alembic_version表中使用上面创建的alembic迁移的修订ID值创建一个条目。然后再次运行$db迁移。这将创建第二个alembic版本文件,该文件应该能够升级数据库

根据您的应用程序状态和您的经验水平,我推荐选项1

第五,升级数据库

阅读文档 我强烈建议阅读flask migrate和Alembic的文档。Flask migrate是Alembic用于Flask应用的一款精心构建的包装器


插入varchar值时,如果忘记添加单引号,则会出现此错误。下面是错误− mysql>插入可降级798值100,Adam;错误1054 42S22:“字段列表”中的未知列“Adam”

以下内容适用于我

import pandas as pd
import sqlalchemy


engine = sqlalchemy.create_engine("mysql+pymysql://root:root@localhost/database name", pool_pre_ping=True)
# then specify the name of the table in the database
df = pd.read_sql_table('table name', engine)
print(df)
你可以在这里找到sqlalchemy文档


“字段列表”中的错误未知列“detail.id”表明,您的模型与数据库中的表不匹配。如何解决此问题?我是flask sqlalchemy的新手。你能告诉我哪里出了问题吗?我怎样才能解决这个问题?你可能在创建表后更改了模型。请看一看flask migrate以保持模型和数据库同步。但是,请注意,stackoverflow是一个问答网站,而不是一个逐步指导问题解决的网站。请通过阅读文档、下面的教程等,努力学习您想要使用的概念。您是否使用了选项1、2或3?是的,当我运行command flask db migrate时。我遇到了相同的错误。您可能需要注释掉data=detail.query.all,以便第一次运行迁移。
$ pip install Flask-Migrate
$ flask db init
$ export FLASK_APP=run.py
$ set FLASK_APP=run.py
$ flask db migrate
$ flask db upgrade
import pandas as pd
import sqlalchemy


engine = sqlalchemy.create_engine("mysql+pymysql://root:root@localhost/database name", pool_pre_ping=True)
# then specify the name of the table in the database
df = pd.read_sql_table('table name', engine)
print(df)