PyMySQL 使用笔记

来源:互联网 发布:单片机温度报警器程序 编辑:程序博客网 时间:2024/06/16 01:19

标签: 数据库 python


connections 模块

类:Connection

  • 用法:执行 pymysql.connect() 得到。而不是构造函数 Connection()
  • pymysql.connect() 的参数即为 Connection() 构造函数的参数。
  • 构造函数:
pymysql.connections.Connection(self,    host=None,          # 要连接的主机地址    user=None,          # 用于登录的数据库用户    password='',        # 密码    database=None,      # 要连接的数据库    port=0,             # 端口,一般为 3306    unix_socket=None,   # 选择是否要用unix_socket而不是TCP/IP    charset='',         # 字符编码    sql_mode=None,      # Default SQL_MODE to use.    read_default_file=None, # 从默认配置文件(my.ini或my.cnf)中读取参数    conv=None,          # 转换字典    use_unicode=None,   # 是否使用 unicode 编码    client_flag=0,      # Custom flags to send to MySQL. Find potential values in constants.CLIENT.    cursorclass=<class 'pymysql.cursors.Cursor'>, # 选择 Cursor 类型    init_command=None,  # 连接建立时运行的初始语句     connect_timeout=10, # 连接超时时间,(default: 10, min: 1, max: 31536000)    ssl=None,           # A dict of arguments similar to mysql_ssl_set()'s parameters.For now the capath and cipher arguments are not supported.     read_default_group=None, # Group to read from in the configuration file.    compress=None,      # 不支持    named_pipe=None,    # 不支持    no_delay=None,      #     autocommit=False,   # 是否自动提交事务    db=None,            # 同 database,为了兼容 MySQLdb    passwd=None,        # 同 password,为了兼容 MySQLdb    local_infile=False, # 是否允许载入本地文件    max_allowed_packet=16777216, # 限制 `LOCAL DATA INFILE` 大小    defer_connect=False, # Don't explicitly connect on contruction - wait for connect call.    auth_plugin_map={}, #    read_timeout=None,  #     write_timeout=None,     bind_address=None   # 当客户有多个网络接口,指定一个连接到主机    )
  • 重要函数
函数 说明 cursor(cursor = None) 创建一个游标 commit() 事务提交,如果没有设为自动提交,则每次操作后必须提交事务,否则操作无效。 rollback() 操作出错时,可以用这个函数回滚到执行事务之前 close() 关闭连接

- 一个例子

import pymysql.cursorsconfig = {          'host':'127.0.0.1',          'port':3306,          'user':'root',          'password':'xinxin2333',          'database':'trade_ms',          'charset':'utf8mb4',          'cursorclass':pymysql.cursors.Cursor,          }# 连接数据库connection = pymysql.connect(**config)

cursors 模块

类 : Cursor

  • 使用 connections.Connection.cursor() 得到,而不是这个类的构造函数
  • connections.Connection.cursor()的参数是 cursor 的类型。
  • 重要函数
函数 说明 callproc(procname, args=()) 执行一个过程 execute(query,args=None) 执行一条SQL语句,返回受影响的行数。若args是列表,用%s做占位符,若是字典,用%(name)s executemany(query,args) 对一个操作运行多个数据,如一次插入多条数据 fetchall() 取出操作返回的所有的行 fetchone() 取出一行 fetchmany(size=None) 取出 size 行 close() 关闭这个游标对象

- 游标类型

类名 说明 Cursor 默认类型,查询返回list DictCursor 与Cursor不同的地方是,查询返回dict,包括属性名 SSCursor 查询不会返回所有的行,而是按需求返回 SSDictCursor 差别同前两个
  • 举例说明
#Cursor 查询返回(10000, 't恤男短袖', 28, Decimal('89.00'), 300) #DictCursor 查询返回{'cid': 10000, 'cname': 't恤男短袖', 'claid': 28, 'price': Decimal('89.00'), 'cnum': 300}
  • 一个例子
#!python3#-*- coding: utf-8 -*-import pymysql.cursors      # 好像import这个模块就可以了config = {          'host':'127.0.0.1',          'port':3306,          'user':'root',          'password':'xinxin2333',          'database':'trade_ms',          'charset':'utf8mb4',          'cursorclass':pymysql.cursors.Cursor,          }connection = pymysql.connect(**config)  # 连接数据库try:    with connection.cursor() as cursor:        sql = 'SELECT * FROM commodity WHERE price > 100 ORDER BY price'        count = cursor.execute(sql) # 影响的行数        print(count)        result = cursor.fetchall()  # 取出所有行        for i in result:            # 打印结果            print(i)        connection.commit()         # 提交事务except:    connection.rollback()           # 若出错了,则回滚finally:    connection.close()