我们将使用 Flask-SQLAlchemy扩展来管理我们应用程序的数据。这个扩展封装了SQLAlchemy 项目,这是一个 对象关系映射器 或者 ORM。ORMs 允许数据库应用程序与对象一起工作,而不是表以及 SQL。执行在对象的操作会被 ORM 翻译成数据库命令。

通常,我们如果建立数据库不当或者有需要增加我删除的东西,我们将会删除以前的数据库重新创建数据库,但在flask中,我们可使用SQLAlchemy-migrate来跟踪数据库的更新。

在此程序中,我们将采用 sqlite 数据库。sqlite 数据库是小型应用的最方便的选择,每一个数据库都是存储在单个文件里。

下面让我们来开始将它应用到我们的程序中去。

一、配置

1.添加新的配置到配置文件config.py中

SQLALCHEMY_DATABASE_URI 是 Flask-SQLAlchemy 扩展需要的。这是我们数据库文件的路径。

SQLALCHEMY_MIGRATE_REPO 是文件夹,我们将会把 SQLAlchemy-migrate 数据文件存储在这里。

2.我们初始化数据库在microplog.py

3.数据库模型的创建

(1)我们首先创建用户user表,我们创建三个字段在这个表里,包括 id,nickname,email,我们确定了用户表后,将它转换成代码

(2)我们再建立一个posts表,用来描述一个用户所写的blog,一个post表里面有四个字段,包括id,timestamp,body,user_id,我们确定了posts表后,将它转换成代码

注:(1)一个用户可以写多篇blog,所以我们将用户id作为posts表的外键。

  (2)我们已经在 User 类中添加一个新的字段称为 posts,它是被构建成一个 db.relationship 字段。这并不是一个实际的数据库字段。对于一个一对多的关系,db.relationship 字段通常是定义在“一”这一边。在这种关系下,我们得到一个 user.posts 成员,它给出一个用户所有的 blog。

  (3)字段是被作为 db.Column 类的实例创建的,db.Column 把字段的类型作为参数,并且还有一些其它可选的参数,比如表明字段是否唯一。

  (4)__repr__ 方法告诉 Python 如何打印这个类的对象。我们将用它来调试。

4.创建数据库

我们在上面已经把模型创建好了,下面我们开始创建数据库。flask-SQLAlchemy通过运行脚本来创建数据库,所以我们在这里编写脚本(db_create.py)

创建好之后我们运行python db_create.py,我们可以看到它会自动生成一个microblog.db的文件。同时还会生成一个文件夹db_repository,里面还有一些文件,这是 SQLAlchemy-migrate 存储它的数据文件的地方。

5.数据库的迁移

数据库的迁移也是通过运行脚本来实现迁移的,这里我们创建一个脚本文件db_migrate.py

创建好之后我们开始运行python db_migrate.py (注:此时我们将会看到有关SQLALCHEMY_TRACK_MODIFICATIONS的一个警告,我们只要在microblog.py中添加这样一句话就行了app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True)

SQLAlchemy-migrate 迁移的方式就是比较数据库,两者间的不同将会被记录成一个迁移脚本存放在迁移仓库中。迁移脚本知道如何去迁移或撤销它,所以它始终是可能用于升级或降级一个数据库。为了以防万一尽量在备份的前提下去迁移数据库。

6.pycharm连接到数据库,以便更好地管理数据库

点击右边的database-》+-》DataSource-》sqlite-》找到项目中前面生成的microblog.db作为文件-》test connection-》ok

7.下面我们可以尝试在python控制台进行数据增和删

最新文章

  1. hibernate.cfg.xml常见配置
  2. Hive : UDFArgumentTypeException Exactly one argument is expected.
  3. 我的ORM之八-- 事件
  4. ScrollReveal.js – 帮助你实现超炫的元素运动效果
  5. Button圆角处理
  6. php 支持递归函数.递归函数就是调用函数本身.
  7. HPU周赛题目解析
  8. 将SQL Server查询导出本地excel(mail发送)
  9. 深圳市共创力推出独家课程《AHB和OSG》高级实务培训课程!
  10. 洛谷P1122最大子树和题解
  11. Codeforces1073E Segment Sum 【数位DP】
  12. E - Reachability from the Capital
  13. windows2008r2系统破解登录密码方法
  14. Mac安装fish shell
  15. 毒害一代Java程序猿的HttpClient
  16. uva 725 DIVISION (暴力枚举)
  17. 微信web端生成支付二维码
  18. maven配置logback
  19. 诱惑当前 你的孩子能hold住吗?
  20. 第二百三十八节,Bootstrap输入框和导航组件

热门文章

  1. 常用Sql语句,及注意事项
  2. 前端-CSS-7-标准文档流&行内元素和块级元素转换
  3. javascript事件之鼠标滚轮(mousewheel)和DOMMouseScroll事件
  4. HIBERNATE知识复习记录4-HQL和QBC
  5. eclipse中创建多模块maven web项目
  6. Ansible 从远程主机添加或删除MySQL数据库
  7. The maximum column size is 767 bytes (Mysql)
  8. lua 中的点、冒号与self
  9. IN_sales_order带后续P IN_ITEM_SITE带P\SP\TP DUMMY
  10. myeclipse 10激活,本人已测试过可行