gpt4 book ai didi

python - 如何围绕已经存在的数据库构建 flask 应用程序?

转载 作者:IT老高 更新时间:2023-10-28 12:53:59 26 4
gpt4 key购买 nike

我已经有一个现有的数据库,它在 MySQL 中有很多表和大量数据。我打算创建一个 Flask 应用程序并与它一起使用 sqlalchemy。现在我在 irc 上询问并在 google 上查看并尝试了以下想法:

首先我使用了sqlacodegen从我的 DB 生成模型。但后来我有点困惑,又看了看。我找到了this .

这看起来是一个优雅的解决方案。

所以第二,我根据那里的解决方案重写了我的models.py,现在我更加困惑了。我正在寻找与现有数据库一起构建此 flask 应用程序的最佳方法。

我查看了 Flask 文档,但对于一个已经存在数据库的项目并没有真正得到任何帮助。有很多好东西可以从头开始创建一些东西,创建数据库等等。但我真的很困惑。

请注意,这是我使用 Flask 的第一天,但​​我有使用 Django 的经验,所以基本概念不是障碍。在为这个用例选择最佳方法时,我需要一些指导。详细的解释将不胜感激。详细地说,我绝对不希望有人编写所有代码并用勺子喂我,但这足以让我开始,那就是将这个数据库无缝集成到 flask 通过 sqlalchemy。请注意,我的数据库位于 MySQL 中。

最佳答案

我想说你的问题与 flask 无关。例如,模板、路由、 View 或登录装饰器没有问题。

您在 SQLAlchemy 中苦苦挣扎。

所以我的建议是暂时忽略 Flask,先习惯 SQLAlchemy。您需要习惯现有的数据库以及如何从 SQLAlchemy 访问它。使用一些 MySQL 文档工具来解决这个问题。以这样的开头(请注意,它与 Flask 无关询问所有...尚未):

#!/usr/bin/python
# -*- mode: python -*-

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:///webmgmt.db', convert_unicode=True, echo=False)
Base = declarative_base()
Base.metadata.reflect(engine)


from sqlalchemy.orm import relationship, backref

class Users(Base):
__table__ = Base.metadata.tables['users']


if __name__ == '__main__':
from sqlalchemy.orm import scoped_session, sessionmaker, Query
db_session = scoped_session(sessionmaker(bind=engine))
for item in db_session.query(Users.id, Users.name):
print item

在“engine =”行中,您需要提供您的 MySQL 数据库路径,以便 SQLAlchemy 找到它。在我的例子中,我使用了一个预先存在的 sqlite3 数据库。

在“class Users(Base)”行中,您需要使用 MySQL 数据库中的现有表之一。我知道我的 sqlite3 数据库有一个名为“users”的表。

在此之后,SQLalchemy 知道如何连接到您的 MySQL 数据库,并且知道其中一个表。您现在需要添加您关心的所有其他表。最后,您需要指定与 SQLalchemy 的关系。这里我指的是一对一、一对多、多对多、父子等。 SQLAlchemy 网站包含一个相当长的部分。

"if __name__ == '__main__'"行之后是一些测试代码。如果我不导入我的 python 脚本,它将被执行,但运行。在这里,您可以看到我创建了一个数据库 session ,并且用于非常简单的查询。

我的建议是您首先阅读 SQLAlchemy 文档的重要部分,例如描述性表定义、关系模型以及如何查询。一旦你知道了这一点,你就可以将我示例的最后一部分更改为一个 Controller (例如,使用 Python 的 yield 方法)并编写一个使用该 Controller 的 View 。

关于python - 如何围绕已经存在的数据库构建 flask 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17652937/

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