模块


使用pymysql对mysql数据库进行操作
pip install PyMySQL

  1. 连接对象

    1. import pymysql
    2. try:
    3. connection = pymysql.connect(
    4. host = 'localhost',
    5. user = 'root',
    6. password = '123456',
    7. db = 'db_users',
    8. charset = 'utf8',
    9. cursorclass = pymysql.cursors.DictCursor)
    10. print(connection)
    11. except Exception as e:
    12. print(e)
    13. >><pymysql.connections.Connection object at 0x00000132FF4C5FD0>

    host ,user,password可以省略不写则如下,设置charset 防止插入中文时出错

    1. db = pymysql.connect(host='localhost',user='root',password='123456',db='db_users',charset='utf8',cursorclass=pymysql.cursors.DictCursor)
  2. 成功后常用方法 | 方法 | 说明 | | —- | —- | | cursor() | 获取游标对象,操作数据库,执行DML | | commit() | 提交事务 | | rollback() | 回滚事务 | | close() | 关闭数据库连接 |

游标对象


连接mysql后可以使用游标对象实现python对数据库的操作,常用方法如下:

方法 说明
execute(operation[,parameters]) 执行数据库操作,SQL语句或者DQL
executemany(operation,seq_of_params) 用于批量操作,如批量更新
fetchone() 获取查询结果集中的下一条记录
fetchmany(size) 获取指定数量的记录
fetchall() 获取结构集的所有记录
close() 关闭当前游标

基本操作流程
python操作数据库 - 图1
例如:新增加一张表

  1. import pymysql
  2. connection = pymysql.connect(
  3. host = 'localhost',
  4. user = 'root',
  5. password = '123456',
  6. db = 'db_users',
  7. charset = 'utf8',
  8. cursorclass = pymysql.cursors.DictCursor)
  9. sql = """
  10. create table books(
  11. id int not null auto_increment primary key,
  12. name varchar(20),
  13. category varchar(50),
  14. price double(10,2) default '0',
  15. publish_time date default null)engine=InnoDB default charset=utf8 collate utf8_general_ci;
  16. """
  17. cursor = connection.cursor()
  18. cursor.execute(sql)
  19. cursor.close()
  20. connection.close()

增删改查操作


  1. DML语句(增删改)

例如:向books中新增一个图书信息

  1. import pymysql
  2. connection = pymysql.connect(
  3. host = 'localhost',
  4. user = 'root',
  5. password = '123456',
  6. db = 'db_users',
  7. charset = 'utf8',
  8. cursorclass = pymysql.cursors.DictCursor)
  9. sql = 'insert into books values(1,"零基础学python","Python","80.00","2018-04-11");'
  10. cursor.execute(sql)
  11. cursor.close()
  12. connection.commit()

例:向books中一次插入多个数据

  1. import pymysql
  2. db = pymysql.connect('localhost','root','123456','db_users',charset='utf8')
  3. cursor = db.cursor()
  4. data = [("零基础学python(彩印版)","Python","100.00","2019-12-11"),
  5. ("Java入门大全","Java","78.88","2019-04-11"),
  6. ("零基础学PHP","PHP","56.00","2016-04-11"),
  7. ("PHP项目开发实战入门","PHP","180.00","2020-01-31")
  8. ]
  9. try:
  10. cursor.executemany("insert into books(name,category,price,publish_time) values(%s,%s,%s,%s);",data)
  11. db.commit()
  12. except:
  13. db.rollback()
  14. db.close()

image.png

  1. DQL(查询语句)

例:按照价格从低到高筛选出3条数据

  1. import pymysql
  2. db = pymysql.connect('localhost','root','123456','db_users',charset='utf8')
  3. cursor = db.cursor()
  4. sql = 'select * from books order by price asc;'
  5. cursor.execute(sql)
  6. data = cursor.fetchall()
  7. for book in data:
  8. print(f'图书:{book["name"]},价格:{book["price"]}') #格式化字符串
  9. db.close()

image.png

ORM编程


对象关系映射是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换
数据库和对象的映像关系如下:

  • 数据表—>类
  • 数据行—>对象
  • 字段—>对象的属性

例如以下是面向对象的方式执行sql语句:

  1. sql = 'select * from books order by price;'
  2. cursor.execute(sql)
  3. data = cursor.fetchall()

改成ORM后则变成:

  1. data = Book.query.all()

使用ORM后就不需要了解底层数据库的语言,直接与数据对象之间实现交互