Flask框架六:Flask操作MySQL数据库

1、SQL AIchemy介绍

python可以使用很多数据库,MySQL、MongoDB、SQLite、PostgreSQL,redis、mongo等,以MySQL为例(只需要会它的安装和连接以及基本使用就可以在flask中运用详情点击查看),除了用SQL语句操作数据库外,在flask中可以使用ORM来操作数据库,使用ORM操作数据库会很便捷

1.1使用环境

①MySQL:通过安装phpstudy集成环境开启MySQL服务,点击查看
②PyMySQL:它是python用来操作MySQL的包,通过pip install pymysql安装
③SQLAlchemy:它是数据库的ORM框架,通过pip insatll SQLalchemy安装

1.2使用说明

①创建引擎
首先要从SQLalchemy中导入create_engine,用这个函数去创建引擎,创建数据库引擎的时候会要传一个固定格式的字符串,dialect+driver://username:password@host:port/database?charset=utf8
dialect是数据库类型是mysql还是sqlite等,要小写,driver是python对应的驱动,MySQL默认的驱动是MySQLdb,其次是用户名:密码@连接数据库的域名:数据库监听的端口号/连接的哪个数据库,指定字符集
②创建连接
用engine.connect()去连接数据库,实现python操作MySQL数据库

1.3示例

from sqlalchemy import create_engine

HOSTNAME = '127.0.0.1'  # 连接数据库地址 -->小区
DATABASE = 'test'  # 数据库 -->单元
PORT = 3306  # 端口 -->门牌号
USERNAME = 'root'  # 用户名和密码 -->开锁
PASSWORD = 'root'
# 用户名对应密码,地址对应端口,连接的哪个数据库
# 如果报了警告,就pip install mysql-connector 将pymysql换为mysqlconnector就好,这是因为最新的官方版本想要我们用最新的去使用
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)
engine = create_engine(DB_URL)  # 创建数据库引擎
with engine.connect()as conn:  # 创建连接
    result = conn.execute('select * from student')  # 执行sql语句,原生的sql写法,后面会讲ORM操作数据库
    print(result)  # 它是一个对象,打印出来的是内存地址 <sqlalchemy.engine.result.ResultProxy object at 0x000001C9581A5DC8>
    print(result.fetchone())  # 打印出一条表中的结果,以元组的形式输出(1, 'beiyue', 'M')


在这里插入图片描述

1.4使用sqlalchemy

一般会将固定格式的字符串写成一个py文件,操作哪个库就导入文件中的哪个固定内容

from sqlalchemy import create_engine
from constants import DB_URI
#连接数据库,让数据显示出来
engine = create_engine(DB_URI,echo=True)
# 使用with语句连接数据库,如果发生异常会被捕获
with engine.connect() as con:
    # 先删除users表
    con.execute('drop table if exists authors')
    # 创建一个users表,有自增长的id和name
    con.execute('create table authors(id int primary key auto_increment,'name varchar(25))')
    # 插入两条数据到表中
    con.execute('insert into persons(name) values("abc")')
    con.execute('insert into persons(name) values("xiaotuo")')
    # 执行查询操作
    results = con.execute('select * from persons')
    # 从查找的结果中遍历
    for result in results:
        print(result)

2、ORM

在flask框架中会使用ORM来操作和管理数据库而不用原生的sql语句,如果只是进行简单的爬取数据和入库操作则可以选择使用原生的SQL语句

2.1ORM定义

对象关系映射(object relationship mapping),通过ORM我们可以通过类的方式去操作数据库,不用写原生的sql语句,将类映射为一张表,属性映射为表字段,实例化的对象映射为一条记录,底层封装的还是sql语句,但是方便我们操作,更加的便捷。

2.2为什么不用原生的sql进行操作数据库

①随着项目的扩大,代码会显得臃肿不好维护,sql语句的复用率不高,会出现很多类似但又不同的冗长的sql语句
②很多sql语句是在业务逻辑中拼出来的,如果数据库更改了,就要改sql语句,工作量大,且容易遗漏一些sql语句

2.3ORM的优点

①易用性:使用ORM做数据库开发可以有效的减少sql语句的书写,写出的模型更加的直观
②设计灵活:可以轻松的写出很复杂的查询语句
③可移植性:SQLAlchemy封装了底层的数据库实现,支持多种关系型数据库

2.4SQLAlchemy的使用

要使用ORM操作数据库,就要先创建一个类来与对应的表映射,这个类必须继承declarative_base实例化的对象具体步骤为,从sqlalchemy.ext.declarative中导入declarative,实例化declarative将创建的数据库引擎作为参数传入实例化对象中,创建一个类控制该数据库中的表

from sqlalchemy import create_engine
from sqlalchemy import Column,Integer,String
from sqlalchemy.ext.declarative import declarative_base


USERNAME = 'root'
PASSWORD = 'root'
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'test'
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
engine = create_engine(DB_URL)
# ORM操作数据库
Base = declarative_base(engine)
# 要使用ORM操作数据库都要declarative_base生成的基类
class Teacher(Base):
    # 定义表的名字
    __tablename__ = 'teacher'
    # 给一些字段 id name gender,
    # column 数据类型、数据的约束
    id = Column(Integer,primary_key=True,autoincrement=True)
    name = Column(String(50),nullable=False)
    gender = Column(Integer,default=1,comment='1为男,2为女')
# 模型映射到数据库中
Base.metadata.create_all()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值