我已经有了一个现有的数据库,在MySQL个数据库中有很多表和很多数据.我打算创建一个Flask应用程序,同时使用sqlalchemy.现在我在irc上发问,在谷歌上四处看看,并try 了以下 idea :

First我用sqlacodegenDB中生成模型.但后来我有点困惑,又看了看.我找到了this.

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

所以Second,我根据答案改写了我的models.py,现在我更困惑了.我正在寻找最好的方法来构建这个flask应用程序以及已经存在的DB.

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

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

推荐答案

我想说你的问题和Flask 一点关系都没有.例如,模板、路由、视图或登录decorator 没有问题.

你挣扎的地方是炼金术.

所以我的建议是暂时忽略Flask ,先习惯炼金术.您需要习惯现有的数据库,以及如何从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脚本,而是运行它,它将被执行.在这里,您可以看到我创建了一个DB会话,这是一个非常简单的查询.

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

Mysql相关问答推荐

'mySQL中的操作员

无条件理解MySQL中内连接和交叉连接的相似性

为分组记录MySQL取取值为TRUE的单行

MySQL全文索引和不区分大小写搜索带来的挑战

我是否需要在 N+1 列上建立索引,才能有效地在 N 列上执行 SELECT,并按其他列排序?

Golang中使用Gorm的Where条件转义字符无法正常工作的问题

如果存在N个特殊行,如何 Select 它们,其余的必须填充常规行,总行数不能超过MySQL中的X行?

为大表优化 Django 模型

关联同一个表中的两列

如何同时从同一个表中 Select 从 SQL 表中删除行

Mysql,显示谁已经和没有 Select 退出巴士服务

如何 Select 具有最新的 2 个日期字段的行?

相关查询 - 在派生表中,我可以有多个嵌套级别吗?

在 Presto Athena 中将字符串转换为数组

在 SQL 中将列添加为 End_date,间隔为 +100 天

MySQL 导出到 outfile:CSV 转义字符

从 MySQL 中的日、月、年字段创建日期

使用 MySql,我可以对列进行排序但最后有 0 吗?

电话号码和地址的mysql数据类型

为什么在 MySQL 中使用外键约束?