MySQL-python中间件的介绍与安装:

1.如果是在类unix系统上,直接进入虚拟环境,输入sudo pip install mysql-python

2.如果是在windows系统上,那么在这里下载http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python下载MySQL_python‑1.2.5‑cp27‑none‑win_amd64.whl,然后在命令行中,进入到MySQL_python‑1.2.5‑cp27‑none‑win_amd64.whl所在的目录,输入以下命令进行安装:


    pip install MySQL_python‑1.2.5‑cp27‑none‑win_amd64.whl
    

Flask-SQLAlchemy的介绍与安装:

1.ORM:Object Relationship Mapping(模型关系映射)。


Object 类
Relationship 关系
Mapping 映射

2.flask-sqlalchemy是一套ORM框架。

3.ORM的好处:可以让我们操作数据库跟操作对象是一样的,非常方便。因为一个表就抽象成一个类,一条数据就抽象成该类的一个对象。

4.安装flask-sqlalchemysudo pip install flask-sqlalchemy

Flask-SQLAlchemy的使用:

1.创建MySQL数据库

# MySQL中操作命令
mysql> create database db_demo1 charset utf8;
Query OK, 1 row affected (0.01 sec)

2.初始化和设置数据库配置信息:

  • 使用flask_sqlalchemy中的SQLAlchemy:
from flask_sqlalchemy import SQLAlchemy

3.设置配置信息:在config.py文件中添加以下配置信息:

# dialect+driver://username:password@host:port/database
DIALECT = 'mysql'
DRIVER = 'mysqldb'
USERNAME = 'root'
PASSWORD = 'root'
HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'db_demo1'

SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST
                                                 ,PORT,DATABASE)

SQLALCHEMY_TRACK_MODIFICATIONS = False
    

4.在主app文件中,添加配置文件:

    app = Flask(__name__)
    app.config.from_object(config)
    db = SQLAlchemy(app)

5.测试连接MySQL有没有问题:

    db.create_all()

如果没有报错,说明配置没有问题,如果有错误,可以根据错误进行修改。

使用Flask-SQLAlchemy创建模型与表的映射:

1.模型需要继承自db.Model,然后需要映射到表中的属性,必须写成db.Column的数据类型。

2.数据类型:

* `db.Integer`代表的是整形.
* `db.String`代表的是`varchar`,需要指定最长的长度。
* `db.Text`代表的是`text`。

3.其他参数:

* `primary_key`:代表的是将这个字段设置为主键。
* `autoincrement`:代表的是这个主键为自增长的。
* `nullable`:代表的是这个字段是否可以为空,默认可以为空,可以将这个值设置为`False`,在数据库中,这个值就不能为空了。

4.最后需要调用db.create_all来将模型真正的创建到数据库中。

Flask-SQLAlchemy数据的增、删、改、查:

1.增:

# 增加:
article1 = Article(title='aaa',content='bbb')
db.session.add(article1)
# 事务
db.session.commit()

2.查:

# 查
select * from article where article.title='aaa';
查询所有数据
article1 = Article.query.filter(Article.title == 'aaa').all()
for v in article1:
    print v.id
查询第一条记录
article1 = Article.query.filter(Article.title == 'aaa').first()
print 'title:%s' % article1.title
print 'content:%s' % article1.content

3.改:

# 改:
# 1. 先把要更改的数据查找出来
article1 = Article.query.filter(Article.title == 'aaa').first()
# 2. 把这条数据需要修改的地方进行修改
article1.title = 'new title'
# 3. 做事务的提交
db.session.commit()

4.删:

# 删
# 1. 把需要删除的数据查找出来
article1 = Article.query.filter(Article.content == 'bbb').first()
# 2. 把这条数据删除掉
db.session.delete(article1)
# 3. 做事务提交
db.session.commit()

Flask-SQLAlchemy外键及其关系:

1.MySQL外键

假设要写一个内容发布系统,每一篇文章会和一个用户相关联。MySQL中两张表的关系如下:

# 用户表
create table users (
    id int primary key autoincrement,
    username varchar(100) not null
)

# 文章表
create table article (
    id int primary key autoincrement,
    title varchar(100) not null,
    content text not null
    author_id int,
    foreign key `author_id` references `users.id`
)

2.SQLAlchemy外键:

    class User(db.Model):
        __tablename__ = 'user'
        id = db.Column(db.Integer,primary_key=True,autoincrement=True)
        username = db.Column(db.String(100),nullable=False)

    class Article(db.Model):
        __tablename__ = 'article'
        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        title = db.Column(db.String(100),nullable=False)
        content = db.Column(db.Text,nullable=False)

        # Article的外键,db.ForeignKey('t_author.id')里面必须是('引用的表表名.引用表的主键')
        author_id = db.Column(db.Integer,db.ForeignKey('user.id'))

        author = db.relationship('User',backref=db.backref('articles'))

3.author = db.relationship('User',backref=db.backref('articles'))解释:

* 给`Article`这个模型添加一个`author`属性,可以访问这篇文章的作者的数据,像访问普通模型一样。
* `backref`是定义反向引用,可以通过`User.articles`访问这个模型所写的所有文章。

4.多对多:

* 多对多的关系,要通过一个中间表进行关联。
* 中间表,不能通过`class`的方式实现,只能通过`db.Table`的方式实现。
* 设置关联:`tags = db.relationship('Tag',secondary=article_tag,backref=db.backref('articles'))`需要使用一个关键字参数`secondary=中间表`来进行关联。
* 访问和数据添加可以通过以下方式进行操作:
  • 添加数据:
    article1 = Article(title='aaa')
    article2 = Article(title='bbb')

    tag1 = Tag(name='111')
    tag2 = Tag(name='222')

    article1.tags.append(tag1)
    article1.tags.append(tag2)

    article2.tags.append(tag1)
    article2.tags.append(tag2)

    db.session.add(article1)
    db.session.add(article2)

    db.session.add(tag1)
    db.session.add(tag2)

    db.session.commit()
  • 访问数据:
            article1 = Article.query.filter(Article.title == 'aaa').first()
            tags = article1.tags
            for tag in tags:
                print tag.name

Flask-Script的介绍与安装:

  1. Flask-Script:Flask-Script的作用是可以通过命令行的形式来操作Flask。例如通过命令跑一个开发版本的服务器、设置数据库,定时任务等。

Flask Script和Flask本身的工作方式类似,只需定义和添加从命令行中被Manager实例调用的命令;

  1. 安装:首先进入到虚拟环境中,然后pip install flask-script来进行安装。
  2. 如果直接在主manage.py中写命令,那么在终端就只需要python manage.py command_name就可以了。
  3. 如果把一些命令集中在一个文件中,那么在终端就需要输入一个父命令,比如python manage.py db init

  4. 例子:

python manage.py runserver

    from flask_script import Manager
    from flask_script_demo import app
    from db_scripts import DBManager

    manager = Manager(app)

    @manager.command
    def runserver():
        print '服务器跑起来了!!!!!'

    # 和数据库相关的操作
    manager.add_command('db',DBManager)

    if __name__ == '__main__':
        manager.run()
  1. 有子命令的例子:

python manage.py db init

    #encoding: utf-8

    from flask_script import Manager

    DBManager = Manager()

    @DBManager.command
    def init():
        print '数据库初始化完成'

    @DBManager.command
    def migrate():
        print '数据表迁移成功'

分开models以及解决循环引用:

  1. 分开models的目的:为了让代码更加方便的管理。
  2. 如何解决循环引用:把db放在一个单独的文件中,切断循环引用的线条就可以了。

Flask-Migrate的介绍与安装:

  1. 介绍:因为采用db.create_all在后期修改字段的时候,不会自动的映射到数据库中,必须删除表,然后重新运行db.craete_all才会重新映射,这样不符合我们的需求。因此flask-migrate就是为了解决这个问题,它可以在每次修改模型后,可以将修改的东西映射到数据库中。
  2. 首先进入到虚拟环境中,然后使用pip install flask-migrate进行安装就可以了。
  3. 使用flask_migrate必须借助flask_scripts,这个包的MigrateCommand中包含了所有和数据库相关的命令。
  4. flask_migrate相关的命令:
    • python manage.py db init:初始化一个迁移脚本的环境,只需要执行一次。
    • python manage.py db migrate:将模型生成迁移文件,只要模型更改了,就需要执行一遍这个命令。
    • python manage.py db upgrade:将迁移文件真正的映射到数据库中。每次运行了migrate命令后,就记得要运行这个命令。
  5. 注意点:需要将你想要映射到数据库中的模型,都要导入到manage.py文件中,如果没有导入进去,就不会映射到数据库中。
  6. manage.py的相关代码:
    from flask_script import Manager
    from migrate_demo import app
    from flask_migrate import Migrate,MigrateCommand
    from exts import db
    from models import Article

    #manage.py db init
    #manage.py db migrate
    #manage.py db upgrade
    # 模型  ->  迁移文件  ->  表

    manager = Manager(app)

    # 1. 要使用flask_migrate,必须绑定app和db
    migrate = Migrate(app,db)

    # 2. 把MigrateCommand命令添加到manager中
    manager.add_command('db',MigrateCommand)

    if __name__ == '__main__':
        manager.run()

参考:使用Flask-Script的命令调用官方文档

Flask-Migrate Documentation https://flask-migrate.readthedocs.io/en/latest/

【Python】Flask系列-数据库笔记的更多相关文章

  1. 知了课堂 Python Flask零基础 笔记整理

    目录 起步 安装Python2.7: Python虚拟环境介绍与安装: pip安装flask: 认识url: URL详解 web服务器和应用服务器以及web应用框架: Flask 第一个flask程序 ...

  2. 【Python】Flask系列-模板笔记

    Jinja2模板 Jinja2模板传参 如何渲染模板: 模板放在templates文件夹下 从flask中导入render_template函数. 在视图函数中,使用render_template函数 ...

  3. Python——Flask框架——数据库

    一.数据库框架 Flask-SQLAlchemy (1)安装: pip install flask-sqlalchemy (2)Flask-SQLAlchemy数据库URL 数据库引擎 URL MyS ...

  4. python flask框架 数据库的使用

    #coding:utf8 from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # ...

  5. Python Flask 开发学习笔记

    Flask学习 安装pipenv虚拟环境 pip Install pipenv 运行pipenv pipenv --version 进入虚拟容器 pipenv install 安装flask pipe ...

  6. Python FLask Web 学习笔记:jinjia2的使用方法1

    # coding:utf-8 from jinja2 import Template x = """ <p>大爷的孙子</p> <ul> ...

  7. 【Python】Flask系列-URL和视图笔记

    1.学习目标 熟悉Flask相关知识. 熟悉web开发流程. 能独立开发Flask项目. 2.环境配置 Python虚拟环境安装 因为python的框架更新迭代太快了,有时候需要在电脑上存在一个框架的 ...

  8. Flask系列:数据库

    这个系列是学习<Flask Web开发:基于Python的Web应用开发实战>的部分笔记 对于用户提交的信息,包括 账号.文章 等,需要能够将这些数据保存下来 持久存储的三种方法: 文件: ...

  9. Python Flask学习笔记之模板

    Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...

随机推荐

  1. 人民币-欧元预测(ARIMA算法)代码

    import pandas as pd import matplotlib.pyplot as plt import statsmodels as sm from statsmodels.graphi ...

  2. (第二周)读《我是一只IT小小鸟》有感

    读了蒋宇东学长的这篇描述他成长经历和生活感悟的博文,我真的收获了很多,有一种“相见恨晚”的感觉.同为航院的学子,我们有太多太多相同的生活学习经历. 我已经是一名大三的学生了,不知不觉中我大学生活的大部 ...

  3. DOM之节点类型加例子

    DOM= Document Object Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构.换句话说,这是表示和处理一个HTML或XML文档的常用方法.D ...

  4. Alpha冲刺——day10

    Alpha冲刺--day10 作业链接 Alpha冲刺随笔集 github地址 团队成员 031602636 许舒玲(队长) 031602237 吴杰婷 031602220 雷博浩 031602634 ...

  5. Linux dd命令制作U盘启动盘

    linux下的dd命令来自于coreutils:http://www.gnu.org/software/coreutils/ https://jingyan.baidu.com/article/d45 ...

  6. Python 实现数据库更新脚本的生成

    我在工作的时候,在测试环境下使用的数据库跟生产环境的数据库不一致,当我们的测试环境下的数据库完成测试准备更新到生产环境上的数据库时候,需要准备更新脚本,真是一不小心没记下来就会忘了改了哪里,哪里添加了 ...

  7. Python [练习题] :字典扁平化

    习题:将source字典扁平化,输出为 target 格式的字典.source = {'a': {'b': 1, 'c': 2}, 'd': {'e': 3, 'f': {'g': 4}}}targe ...

  8. 骑士 HYSBZ - 1040(基环树+树形dp)

    Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在和平环境中 ...

  9. poj 1511 Invitation Cards(最短路中等题)

    In the age of television, not many people attend theater performances. Antique Comedians of Malidine ...

  10. 三、spring boot 1.5.4 web容器定制(端口号等修改)

    spring boot 默认采用tomcat作为嵌入的web容器 定制方式有三种 1. 2.如下 @Component public class CustomizationBean implement ...