Python Flask框架-开发简单博客-定义和操作数据库_flask创建数据库

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

本系列已发布文章:

  1. Python Flask框架-开发简单博客-开篇介绍
  2. Python Flask框架-开发简单博客-项目布局、应用设置
文章目录

1. 本章知识点总结

请添加图片描述

2. 定义(创建)数据库

2.1 简单规划

开发的个人博客,计划使用SQLite 数据库来储存用户和博客内容。 Python 内置了 SQLite 数据库支持,相应的模块为 sqlite3
如果你不是很熟悉 SQL ,请先阅读SQLite 官方文档 ,不用精通,能使用即可。

计划建两个表分别为user表和post表,sql表文件保存路径为flaskr/schema.sql

2.2 user表字段分析

  • id:用户id、整数、主键、自增加
  • username:用户名、文本、值唯一,不能重复
  • password: 登陆密码、文本、不能为空

flaskr/schema.sql

2.3 post表字段分析

  • id: 文章id、整数、主键、自增加
  • author_id:文章作者id、整数、不为空、外键
  • created:文章创建时间、时间戳、不为空(默认值为创建时间)
  • title:文章标题、文本、不为空
  • body:文章内容、文本,不为空

2.4 创建数据库的sql脚本

编写schema.sql的脚本,该脚本用于创建SQLite 数据库,并内置user表和post表。所以这个创建过程仅在个人博客第一次运行时运行一次即可。
后续数据库内容的更新应执行常规的增删改查操作。

注意,该脚本仅在个人博客第一次运行时创建数据库,后续不应再次运行(否则,数据库将被重置)。
所以在第一次运行时,要先卸载数据库中所有表,以防报错。

路径flaskr/schema.sql

// 卸载库中所有表
DROP TABLE IF EXISTS user;
DROP TABLE IF EXISTS post;

// 新建user表
CREATE TABLE user (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  username TEXT UNIQUE NOT NULL,
  password TEXT NOT NULL
);

// 新建post表
CREATE TABLE post (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  author_id INTEGER NOT NULL,
  created TIMESTAMP NOT NULL DEFAULT CURRENT\_TIMESTAMP,
  title TEXT NOT NULL,
  body TEXT NOT NULL,
  FOREIGN KEY (author_id) REFERENCES user (id)
);

3. 操作数据库

前面写完了sql脚本,接下来就要写db.py这个python脚本,用来操作数据库。路径规划为flaskr/db.py
操作具体包括了如下几个具体功能

  • 建立数据库连接 — 用于将程序与数据库建立连接
  • 关闭数据库连接 — 完成一次操作后,及时关闭当前连接
  • 初始化数据库 — 第一次运行博客时创建数据库生成表
  • 在应用中注册db.py实现flask的调用
    这个理解起来,有点绕,简单说来,
    我们自己定义的函数需要在应用实例中注册,否则无法使用。应用实例就是app = Flask(__name__, instance_relative_config=True)但是问题是,这个app=我们是写在了工厂函数中(create_app)。意思就是这个实例其实并没有建立,所以我们这个注册只能在工厂函数中注册。那问题来了,在一个工厂函数中如何注册。
    答案就是,函数调用另一个函数实现:工厂函数中app实例动态创建时,动态调用注册函数,实现动态注册。

flaskr/db.py 请注意代码中的注释和下面关于各函数的说明文字。

import sqlite3
import click
from flask import current_app, g
from flask.cli import with_appcontext


# 1.创建数据库连接
def get\_db():
    if 'db' not in g:
        g.db = sqlite3.connect(
            current_app.config['DATABASE'],
            detect_types=sqlite3.PARSE_DECLTYPES
        )
        g.db.row_factory = sqlite3.Row
    return g.db


# 2. 关闭数据库连接
def close\_db():
    db = g.pop('db', None)
    if db is not None:
        db.close()


# 3. 初始化数据库
def init\_db():


![img](https://img-blog.csdnimg.cn/img_convert/21ad56acfe244172cdaa339fa5ae97c7.png)
![img](https://img-blog.csdnimg.cn/img_convert/a7e5a74d4123ff6a550bfc4e4e8a4f10.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值