gpt4 book ai didi

python - 到目前为止还无法使 Flask-MySQL 反射正常工作

转载 作者:行者123 更新时间:2023-11-28 22:23:21 34 4
gpt4 key购买 nike

我一直在搜索 StackOverflow 问题并阅读 SQLAlchemy 和 Flask-SQLAlchemy 文档,但仍然没有弄清楚如何使反射工作(对 SQLAlchemy 来说仍然是新的)。

当我尝试使用引擎映射表时,出现错误“sqlalchemy.exc.ArgumentError:Mapper Mapper|User|user 无法为映射表‘user’组装任何主键列”。尽管如此,用户还是将“id”列作为数据库中的主键。我不确定我是否需要先在这里做其他事情。我曾想,如果我能反射,它会自动为我的 User 模型类属性提供以数据库列命名的属性,而我不必手动定义它们。

这是我到目前为止拼凑的代码:

from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.orm import mapper

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://" + dbUser + ":" + dbPass + "@" + dbAddress + ":3306/" + dbName

app.config["SQLALCHEMY_ECHO"] = True

db = SQLAlchemy(app)
engine = db.engine
meta = db.metadata

现在,我知道 db 将为我提供良好的数据库 session 。我还不确定我在引擎和元方面做错了什么。我已经看到引擎被用来以不同的方式创建上下文,但我想我是用这条线(从上面)创建的:

db = SQLAlchemy(app)

这是我试图反射(reflect)模型类的地方:

class User(db.Model):
try:
self = db.Model.metadata.tables('user', metadata)
#self = Tadb.Model.metadata.tables('user', meta, autoload=True, autoload_with=engine, extend_existing=True)
#Table('user', metadata, autoload_with=engine, extend_existing=True)
#self = Table('user', meta, autoload_with=engine, extend_existing=True)
#self.metadata.reflect(extend_existing=True, only=['user'])
except Exception as e:
print("In init User(): failed to map table user - " + str(e))

我在这一行(从上面)得到映射器错误:

self = db.Model.metadata.tables('user', metadata) 

我也尝试过其他行,但它似乎不知道 Table 是什么...我有 Flask-SQLAlchemy 2.3.2。

我在这里犯了任何明显的错误吗?

最佳答案

您可以尝试反射(reflect) id 字段(或其在数据库中的真实名称)以及代码中需要的所有字段:

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), nullable=False)

关于python - 到目前为止还无法使 Flask-MySQL 反射正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47045029/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com