我想说你的问题和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
方法),并编写一个使用该控制器的视图.