gpt4 book ai didi

python - 在 Flask App 中重用 SqlAlchemy 脚本中的模型?

转载 作者:行者123 更新时间:2023-11-28 22:48:54 24 4
gpt4 key购买 nike

我有一个守护进程在运行,它生成数据并使用 Flask 将其写入我的数据库。我现在正在同一数据之上构建一个 API 服务,我希望重用我的同一模型,但这似乎没有按预期工作。这是我的模型代码:

from sqlalchemy import BigInteger, Column, DateTime, Float, ForeignKey, Index, Integer, String
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
metadata = Base.metadata


class User(Base):
__tablename__ = 'users'

id = Column(Integer, primary_key=True)
name = Column(String(200), nullable=False, unique=True)
...

但是当我尝试从 Flask 应用程序调用它时:

from flask.ext.sqlalchemy import SQLAlchemy
from models import User

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'some_mysql_connect_str'
db = SQLAlchemy(app)

...

def get_users_named_bob():
return User.query.filter_by(name='bob')

我得到:AttributeError: type object 'User' has no attribute 'query'

这样做的最佳方法是什么?

旁注:我看到了 this question从大约一年前开始,但我希望从那以后情况有所好转,因为这似乎是一个常见的用例。

最佳答案

我查看了 Flask-SQLAlchemy 代码,但我认为没有什么好方法可以满足您的需求。 Flask-SQLAlchemy 包装了相当多的 SQLAlchemy 对象,并期望它处理的对象继承自它的 Model 类,而不是普通的 SQLAlchemy 类。

您可以在这里采用多种方式,但都不是很好。首先,您可以在 Flask 中使用纯 SQLAlchemy。这有点笨拙,因为您不会获得 Flask-SQLAlchemy 的任何优点,而且您必须自己处理将数据库 session 与 Flask 上下文结合的问题。有点丑,但可以做一些工作。

另一种选择是将您的模型更改为 Flask-SQLAlchemy 并修复您的守护程序代码以使用它们。我的应用程序运行了很多 cronjobs,它们都是这样开始的:

from myapp import app
from myapp.models import db, User

# do stuff with User, db

这也可能很笨拙,因为您必须确保您的守护进程在其环境中有应用程序包,而且确保应用程序在所有上下文中具有相同的配置可能很棘手。

也许其他人有更好的主意,但我认为您现在可能无法使用这些选项。对不起,我没有更好的答案给你。

关于python - 在 Flask App 中重用 SqlAlchemy 脚本中的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24640850/

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