最初的打算
想测试从0到1跑起我一贯的新建的flask项目工程,本来打算跑起来然后执行tree -L 3 > list.md(必须L,not l)导出项目目录树,结果中间遇到的几个问题,解决它们的同时把以前的某个疑惑也顺带solve掉了。
先列出最后跑通的目录树:
1 | |-- __pycache__ |
数据库方面是使用flask_sqlalchemy连接本地mysql数据库,建库在电脑终端命令行建立,flask_sqlalchemy的特色是ORM(Object Relationships Mapping 对象关系映射)(应该都知道吧,python的一个类就相当于数据库中的一个表,类的属性就是表的属性。ORM 使用对象,封装了数据库操作,因此可以不碰SQL 语言。开发者只使用面向对象编程,与数据对象直接交互,不用关心底层数据库。)所以使用它建立一个表是通过定义的类建立的,我遇到报错sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, "Table 'hi.user' doesn't exist"),加上我使用了flask_script和flask_migrate。
flask_migrate
flask_migrate 是处理 sqlalchemy 数据迁移的工具。flask_migrate 是当数据模型发生变化的时候,将修改后的东西重新映射到数据库中。使用 python manager.py db init初始化数据库,只有最开始使用一次。使用Migrate关联db, app.
之后的更新就使用下面两条命令。python manager.py db migrate , python manager.py db upgrade
这几个命令就会在flask_sqlalchemy连接的数据库建好表,更新数据。
flask_script
flask项目如果需要使用通过命令行进行操作,需要引入flask_script扩展。通过使用flask_script扩展,我们可以在flask服务器启动的时候,通过命令行的方式传入参数。通过Manager创建对象manager,管理app。给manager添加一条操作命。
使用python app.py --help可以看到引入flask_script后的可选参数。
相关迁移命令:
- 生成迁移文件夹
python xxx.py db init - 将模型类生成迁移脚本
python xxx.py db migrate - 将迁移脚本更新到数据库中
python xxx.py db upgrade
1 | python app.py --help |
-
使用命令行启动
flask启动
Flask应用不仅仅可以通过app.run()方法中传参以及启动,通过flask_script键入python hello.py runserver来启动服务,还可以-h -p分别修改主机和端口号 -
执行flask的交互shell模式

说回正题,以上就是解决table xxx 不存在的报错。
按照这个目录树,我来详细阐述一贯的项目结构。
首先是app.py ,加入了flask_script和flask_migrate,就不像入门的demo里使用app = Flask(__name__),而是在新建立的名叫apps的python package下的__init__.py文件里定义一个create_all()函数,在另一个叫exts的python package下的__init__.py里,实例化一个SQLAlchemy类db。
- apps/init.py
1 | from flask import Flask |
在app.py里就可以调用上面的函数:
1 | from flask_migrate import Migrate, MigrateCommand |
在apps文件夹下建立user文件夹,user里就有model.py view.py
类就在model.py里定义,即数据库中的表。view.py作为蓝图,负责渲染模板,业务逻辑。模板的写法,语法也要记住。