zoukankan      html  css  js  c++  java
  • PyMySQL的基本操作

    官网文档链接:https://pymysql.readthedocs.io/en/latest/

    1.PyMySQL 安装

    1 pip install pymysql

    2.数据库连接

    注:MySQL数据库已创建数据库TESTDB,在TESTDB数据库中您已经创建了表 EMPLOYEE

     1 # -*- coding:utf-8 -*-
     2 import pymysql
     3 
     4 # 打开数据库连接
     5 connection = pymysql.connect(
     6     host='localhost',           # IP,MySQL数据库服务器IP地址
     7     port=3306,                  # 端口,默认3306,可以不输入
     8     user='root',                # 数据库用户名
     9     password='yxh1990',         # 数据库登录密码
    10     database='testdb',             # 要连接的数据库
    11     charset='utf8'              # 字符集,注意不是'utf-8'
    12 )
    13 
    14 # 使用cursor()方法创建一个游标对象cursor
    15 cursor = connection.cursor()
    16 
    17 # 使用execute()方法执行SQL查询
    18 sql = 'SELECT VERSION()'
    19 cursor.execute(sql)
    20 
    21 # 使用fetchone()获取单条数据
    22 data = cursor.fetchone()
    23 print("数据库版本:%s" % data)
    24 
    25 # 关闭数据库
    26 connection.close()

    执行后的结果:

    数据库版本:5.7.21-log

    2.创建数据库表

     1 # -*- coding:utf-8 -*-
     2 import pymysql
     3 
     4 # 打开数据库连接
     5 connection = pymysql.connect(
     6     host='localhost',           # IP,MySQL数据库服务器IP地址
     7     port=3306,                  # 端口,默认3306,可以不输入
     8     user='root',                # 数据库用户名
     9     password='yxh1990',         # 数据库登录密码
    10     database='testdb',             # 要连接的数据库
    11     charset='utf8'              # 字符集,注意不是'utf-8'
    12 )
    13 
    14 # 使用cursor()方法创建一个游标对象cursor
    15 cursor = connection.cursor()
    16 
    17 # 使用execute()方法执行SQL,如果表存在则删除
    18 sql = 'DROP TABLE IF EXISTS EMPLOYEE'
    19 cursor.execute(sql)
    20 
    21 # 创建表
    22 create_table_sql = """CREATE TABLE EMPLOYEE ( 
    23     ID INT(12) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    24     FIRST_NAME CHAR(20) NOT NULL,
    25     LAST_NAME CHAR(20),
    26     AGE INT,
    27     SEX CHAR(1),
    28     SALARY FLOAT)"""
    29 cursor.execute(create_table_sql)
    30 
    31 # 关闭数据库
    32 connection.close()

    3.数据库插入操作

     1 # -*- coding:utf-8 -*-
     2 import pymysql
     3 
     4 # 打开数据库连接
     5 connection = pymysql.connect(
     6     host='localhost',           # IP,MySQL数据库服务器IP地址
     7     port=3306,                  # 端口,默认3306,可以不输入
     8     user='root',                # 数据库用户名
     9     password='yxh1990',         # 数据库登录密码
    10     database='testdb',             # 要连接的数据库
    11     charset='utf8'              # 字符集,注意不是'utf-8'
    12 )
    13 
    14 # 使用cursor()方法创建一个游标对象cursor
    15 cursor = connection.cursor()
    16 
    17 # SQL插入语句
    18 insert_sql = "INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, SALARY) 
    19               VALUES ('%s','%s', %s, '%s', %s)" 
    20               % ('Mac', 'Mohan', 20, 'M', 2000.00) 
    21 try:
    22     # 执行sql语句
    23     cursor.execute(insert_sql)
    24     # 提交
    25     connection.commit()
    26 except:
    27     # 发生错误时回滚
    28     connection.rollback()
    29 
    30 # 关闭数据库
    31 connection.close()

    批量插入:

     1 # -*- coding:utf-8 -*-
     2 import pymysql
     3 
     4 # 打开数据库连接
     5 connection = pymysql.connect(
     6     host='localhost',           # IP,MySQL数据库服务器IP地址
     7     port=3306,                  # 端口,默认3306,可以不输入
     8     user='root',                # 数据库用户名
     9     password='yxh1990',         # 数据库登录密码
    10     database='testdb',             # 要连接的数据库
    11     charset='utf8'              # 字符集,注意不是'utf-8'
    12 )
    13 
    14 # 使用cursor()方法创建一个游标对象cursor
    15 cursor = connection.cursor()
    16 
    17 # 插入语句
    18 insert_sql = "INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, SALARY) VALUES (%s, %s, %s, %s, %s)"    # 注意此处不要使用'%s',使用s%站位
    19 args_list = [('Mei', 'Han', 20, 'F', 3000.00), ('Obama', 'Qiao', 57, 'M', 2348.01), ('Jim', 'Cluse', 35, 'F', 2231.01), ('Macer', 'Jordan', 45, 'M', 2340.10)]
    20 
    21 try:
    22     # 执行sql语句
    23     cursor.executemany(insert_sql, args_list)
    24     # 提交 
    25     connection.commit()
    26 except:
    27     # 发生错误时回滚
    28     connection.rollback()
    29 
    30 # 关闭数据库
    31 connection.close()

    4.数据库查询操作

    Python查询MySQL使用fetchone()获取单条数据,使用fetchmany(size=None)获取多条数据,使用fetchall()获取所有数据。

    • fetchone():获取下个一个查询结果集。结果集是一个对象(目前看到的事tuple格式)
    • fetchmany(size=None):从结果集中获取size个结果,如果size=None,则获取第一个
    • fetchall():获取全部的返回行。
    • rowcount:这是一个只读属性,并返回执行execute()方法后影响的行数。
     1 # -*- coding:utf-8 -*-
     2 import pymysql
     3 
     4 # 打开数据库连接
     5 connection = pymysql.connect(
     6     host='localhost',           # IP,MySQL数据库服务器IP地址
     7     port=3306,                  # 端口,默认3306,可以不输入
     8     user='root',                # 数据库用户名
     9     password='yxh1990',         # 数据库登录密码
    10     database='testdb',             # 要连接的数据库
    11     charset='utf8'              # 字符集,注意不是'utf-8'
    12 )
    13 
    14 # 使用cursor()方法创建一个游标对象cursor
    15 cursor = connection.cursor()
    16 
    17 # 查询语句
    18 select_sql = "SELECT * FROM EMPLOYEE WHERE SALARY>2000"
    19 
    20 # fetchone()方法
    21 try:
    22     # 执行sql语句
    23     cursor.execute(select_sql)    
    24     result_one = cursor.fetchone()
    25     result_two = cursor.fetchone()
    26     result_three = cursor.fetchone()
    27     result_four = cursor.fetchone()
    28     print(result_one)
    29     print(result_two)
    30     print(result_three)
    31     print(result_four)
    32 except:
    33     print('fetchone获取数据失败')
    34 
    35 # fetchmany(size=none)
    36 try:
    37     cursor.execute(select_sql)
    38     result_many = cursor.fetchmany(size=None)
    39     print(result_many)
    40 except:
    41     print('fetchmany获取数据失败')
    42 
    43 # fetchall()和rowcount
    44 try:
    45     cursor.execute(select_sql)    
    46     result_all = cursor.fetchall()
    47     row_count = cursor.rowcount
    48     print(result_all)
    49     print(row_count)
    50 except:
    51     print('fetchmany获取数据失败')
    52 
    53 # 关闭数据库
    54 connection.close()

    以上脚本执行结果如下:

    1 (2, 'Jim', 'Cluse', 32, 'M', 5000.78)
    2 (3, 'Mary', 'Lily', 28, 'F', 3564.89)
    3 (4, 'Tom', 'Kuke', 35, 'M', 4545.56)
    4 None
    5 ((2, 'Jim', 'Cluse', 32, 'M', 5000.78), (3, 'Mary', 'Lily', 28, 'F', 3564.89))
    6 ((2, 'Jim', 'Cluse', 32, 'M', 5000.78), (3, 'Mary', 'Lily', 28, 'F', 3564.89), (4, 'Tom', 'Kuke', 35, 'M', 4545.56))
    7 3

    5.数据库更新操作

     1 # -*- coding:utf-8 -*-
     2 import pymysql
     3 
     4 # 打开数据库连接
     5 connection = pymysql.connect(
     6     host='localhost',           # IP,MySQL数据库服务器IP地址
     7     port=3306,                  # 端口,默认3306,可以不输入
     8     user='root',                # 数据库用户名
     9     password='yxh1990',         # 数据库登录密码
    10     database='testdb',             # 要连接的数据库
    11     charset='utf8'              # 字符集,注意不是'utf-8'
    12 )
    13 
    14 # 使用cursor()方法创建一个游标对象cursor
    15 cursor = connection.cursor()
    16 
    17 # 更新语句
    18 update_sql = "UPDATE EMPLOYEE SET SALARY = SALARY + 1000 WHERE SEX='%c'" % ('M')
    19 
    20 try:
    21     # 执行sql语句
    22     cursor.execute(update_sql)    
    23     connection.commit()
    24 except:
    25     # 发生错误时回滚
    26     connection.rollback()
    27 
    28 # 关闭数据库
    29 connection.close()

    6.数据库删除操作

     1 # -*- coding:utf-8 -*-
     2 import pymysql
     3 
     4 # 打开数据库连接
     5 connection = pymysql.connect(
     6     host='localhost',           # IP,MySQL数据库服务器IP地址
     7     port=3306,                  # 端口,默认3306,可以不输入
     8     user='root',                # 数据库用户名
     9     password='yxh1990',         # 数据库登录密码
    10     database='testdb',             # 要连接的数据库
    11     charset='utf8'              # 字符集,注意不是'utf-8'
    12 )
    13 
    14 # 使用cursor()方法创建一个游标对象cursor
    15 cursor = connection.cursor()
    16 
    17 # 删除语句
    18 delete_sql = "DELETE FROM EMPLOYEE WHERE AGE>'%s'" % (30)
    19 
    20 # fetchone()方法
    21 try:
    22     # 执行sql语句
    23     cursor.execute(delete_sql)
    24     # 提交修改  
    25     connection.commit()
    26 except:
    27     # 发生错误时回滚
    28     connection.rollback()
    29 
    30 # 关闭数据库
    31 connection.close()

    7.Connection类和Cursor类

     7.1 Connection类

    class pymysql.connections.Connection(host=None, user=None, password='', database=None, port=0, unix_socket=None, charset='', sql_mode=None, read_default_file=None, conv=None, use_unicode=None, client_flag=0, cursorclass=<class 'pymysql.cursors.Cursor'>, init_command=None, connect_timeout=10, ssl=None, read_default_group=None, compress=None, named_pipe=None, autocommit=False, db=None, passwd=None, local_infile=False, max_allowed_packet=16777216, defer_connect=False, auth_plugin_map=None, read_timeout=None, write_timeout=None, bind_address=None, binary_prefix=False, program_name=None, server_public_key=None)

    参数:

    host:数据库服务器所在的主机

    user:用户名

    password:密码

    database:数据库名, None to not use a particular one.

    port:端口号,默认值3306

    charset:编码(注:utf8不是utf-8)

    begin():开始事务

    close():关闭连接

    Raise:如果该连接已关闭,则会引起异常

    commit():提交事务

    cursor(cursor=None):创建一个游标

    参数:Cursor,SSCursor,DictCursor和SSDictCursor中的任意一个,默认None的时候用的Cursor

    open:如果连接打开,则返回True

    ping(reconnect=True):检查数据库服务连接是否正常

    参数:reconnect 如果连接断开则重新连接

    Raise:如果连接已经关闭,且此时reconnect=False时则会引起异常

    rollback():回滚事务

    select_db():选择数据库

    参数:db 数据库名称

    show_warnings():发送“警告”SQL命令

      

    7.2 Cursor类

    用于数据库交互的对象。不要用Corsor自己创建游标实例,调用connections.Connect.cursor()。

    close():使用所有数据时关闭游标

    execute(query, args=None):执行一个query语句

      参数:

    query(str):Query to execute

    args(tuple,list or dict)可选参数

      返回:受影响的行数(返回类型:int)

    注:如果参数args是列表或元组,%s可以用作查询中的占位符。如果参数args是一个字典, %(name)s可以用作查询中的占位符。

    executemany(query, args):通过参数批量执行query语句

      参数:

    query: Query to execute on the server

    args:序列的序列或者映射的序列。

    返回:受影响的行数(返回类型:int)

    注:该方法提高了多行INSERT和REPLACE的性能。否则,它相当于用execute()遍历所有参数。

    fetchall():获取所有行

    fetchmany(size=None):根据size值获取行数

    fetchone():获取下一行

    max_stmt_length=1024000:executemany()生成的语句的最大大小。

    允许语句的最大大小为max_allowed_packet - packet_header_size。max_allowed_packet的默认值是1048576。

    mogrify(query, args=None)

     

    7.3 SSCursor类,DictCursor类和SSDictCursor类

     SSCursor中的方法有:close()、fetchall()、fetchall_unbuffered()、fetchmany(size=None)、fetchone()、read_next

     SSCursor,无缓冲游标,主要用于返回大量数据的查询,或在网速慢的时候连接远程服务器。

    使用 SSCursor (流式游标),避免客户端占用大量内存。(这个 cursor 实际上没有缓存下来任何数据,它不会读取所有所有到内存中,它的做法是从储存块中读取记录,并且一条一条返回给你。),需要注意的:因为 SSCursor 是没有缓存的游标,结果集只要没取完,这个 conn 是不能再处理别的 sql,包括另外生成一个 cursor 也不行的。如果需要干别的,请另外再生成一个连接对象。

    DictCursor的返回结果是字典类型:

     1 # -*- coding:utf-8 -*-
     2 import pymysql
     3 
     4 # 打开数据库连接
     5 connection = pymysql.connect(
     6     host='localhost',           # IP,MySQL数据库服务器IP地址
     7     port=3306,                  # 端口,默认3306,可以不输入
     8     user='root',                # 数据库用户名
     9     password='yxh1990',         # 数据库登录密码
    10     database='testdb',             # 要连接的数据库
    11     charset='utf8'              # 字符集,注意不是'utf-8'
    12 )
    13 
    14 # 使用cursor()方法创建一个字典游标对象DictCursor
    15 dict_cursor = connection.cursor(pymysql.cursors.DictCursor)
    16 
    17 # 查询语句
    18 select_sql = "SELECT * FROM EMPLOYEE"
    19 
    20 try:
    21     # 执行sql语句
    22     dict_cursor.execute(select_sql)
    23     result_all = dict_cursor.fetchall()
    24     print(result_all)
    25 except:
    26     print('查询发生错误!')
    27 
    28 # 关闭数据库
    29 connection.close()

    执行结果:

    [{'ID': 1, 'FIRST_NAME': 'Mac', 'LAST_NAME': 'Mohan', 'AGE': 20, 'SEX': 'M', 'SALARY': 3000.0}, 
    {'ID': 3, 'FIRST_NAME': 'Mary', 'LAST_NAME': 'Lily', 'AGE': 28, 'SEX': 'F', 'SALARY': 3564.89},
    {'ID': 4, 'FIRST_NAME': 'Mei', 'LAST_NAME': 'Han', 'AGE': 20, 'SEX': 'F','SALARY': 3000.0},
    {'ID': 5, 'FIRST_NAME': 'Obama', 'LAST_NAME': 'Qiao', 'AGE': 57, 'SEX': 'M', 'SALARY': 2348.01},
    {'ID': 6, 'FIRST_NAME': 'Jim', 'LAST_NAME': 'Cluse', 'AGE': 35, 'SEX': 'F', 'SALARY': 2231.01},
    {'ID': 7, 'FIRST_NAME': 'Macer', 'LAST_NAME': 'Jordan', 'AGE': 45, 'SEX': 'M', 'SALARY': 2340.1}]
  • 相关阅读:
    Django的models介绍
    Django的模板继承
    Django的模板语言介绍
    django的视图函数介绍
    django的流程分析
    1、数据库优化
    git 开发中的总结
    ob
    docker-compose
    如何批量删除Docker中已经停止的容器
  • 原文地址:https://www.cnblogs.com/smartsmile-yxh/p/11988644.html
Copyright © 2011-2022 走看看