Flask.config
字典。配置变量的名称必须使用大写,写入配置的语句一般会放到扩展类实例化语句之前。SQLALCHEMY_DATABASE_URI
变量来告诉 SQLAlchemy 数据库连接地址:注意 这个配置变量的最后一个单词是 URI,而不是 URL。
app.root_path
返回程序实例所在模块的路径(目前来说,即项目根目录),我们使用它来构建文件路径。数据库文件的名称和后缀你可以自由定义,一般会使用 .db、.sqlite 和 .sqlite3 作为后缀。sqlite:///
)。在本书的示例程序代码里,做了一些兼容性处理,另外还新设置了一个配置变量,实际的代码如下:db.Model
。db.Column
,传入的参数为字段的类型,下面的表格列出了常用的字段类。db.Column()
中添加额外的选项(参数)可以对字段进行设置。比如,primary_key
设置当前字段是否为主键。除此之外,常用的选项还有 nullable
(布尔值,是否允许为空值)、index
(布尔值,是否设置索引)、unique
(布尔值,是否允许重复值)、default
(设置默认值)等。db.String(20)
datetime
对象db.drop_all()
删除表,然后重新创建:提示 上面打开 Python Shell 使用的是flask shell
命令,而不是python
。使用这个命令启动的 Python Shell 激活了“程序上下文”,它包含一些特殊变量,这对于某些操作是必须的(比如上面的db.create_all()
调用)。请记住,后续的 Python Shell 都会使用这个命令打开。
flask shell
类似,我们可以编写一个自定义命令来自动执行创建数据库表操作:flask initdb
命令就可以创建数据库表:--drop
选项可以删除表后重新创建:提示 在实例化模型类的时候,我们并没有传入id
字段(主键),因为 SQLAlchemy 会自动处理这个字段。
db.session.commit()
很重要,只有调用了这一行才会真正把记录提交进数据库,前面的 db.session.add()
调用是将改动添加进数据库会话(一个临时区域)中。query
属性调用可选的过滤方法和查询方法,我们就可以获取到对应的单个或多个记录(记录以模型类实例的形式表示)。查询语句的格式如下:提示 我们在说 Movie 模型的时候,实际指的是数据库中的 movie 表。表的实际名称是模型类的小写形式(自动生成),如果你想自己指定表名,可以定义__tablename__
属性。
Movie
模型中主键为 2
的记录:Movie
模型中主键为 1
的记录:index
可以从数据库里读取真实的数据:index
视图中,原来传入模板的 name
变量被 user
实例取代,模板 index.html 中的两处 name
变量也要相应的更新为 user.name
属性:flask forge
命令就会把所有虚拟数据添加到数据库里: