PyMySQL使用参考向导

PyMySQL官方API

1. 连接对象(Connection Object)

  用MySQL服务器表示套接字。
  获取此类实例的正确方法是调用Connect(),用于建立与MySQL数据库的连接,可以接受多个参数:

1.1 参数

host - 数据库服务器所在的主机
user - 作为用户名来登陆
password(passwd) – 登陆的密码。
database - 要使用的数据库,None表示不使用特定的数据库。
port – 要使用的MySQL端口(默认值:3306)
bind_address - 当客户端有多个网络接口时,指定从哪个接口连接到主机。参数可以是主机名或IP地址。
unix_socket – 通信方式您可以选择使用unix socket而不是tcp/ip。
read_timeout – 读取连接超时(秒)(默认值:None)
write_timeout – 写入连接超时(秒)(默认值:None )
Charset–要使用的字符集。
SQL_mode – 默认使用的SQL_MODE。
read_default_file – 指定my.cnf文件从[客户机]部分读取这些参数。
conv – 要使用的转换字典,而不是默认字典。用于提供自定义类型的封装和解析。见转换器。
use_unicode – 是否默认为unicode字符串。对于py3,此选项默认为true。
client_flag – 发送到MySQL的自定义标记。在constants.CLIENT中查找潜在值。
Cursorclass – 要使用的自定义游标类。
init_command – 建立连接时要运行的初始SQL语句。
connect_timeout – 超时后连接异常。(默认值:10,最小值:1,最大值:31536000)
ssl – 类似于mysql_ssl_set()参数的参数字典。
read_default_group - 读取配置文件中要读取的组。
compress – 不支持(Not supported)
name_pipe(命名管道) - 不支持(Not supported)
autocommit – 自动提交模式。None表示使用服务器默认值。(默认值:False)
local_infile – 用于启用加载数据本地命令的布尔值。(默认值:False)
max_allowed_packet – 发送到服务器的最大数据包大小(字节)。(默认值:16MB),仅用于限制小于默认值(16KB)“加载本地文件”数据包的大小。
dafer_connect - 不要在构造时显式连接 - 等待连接调用。(默认值:False)
server_public_key – SHA256身份验证插件的公共key值。(默认值:None)
db – 数据库的别名。(与MySQLdb兼容)
passwd – 密码的别名。(与MySQLdb兼容)
binary_prefix – 在字节和字节数组上添加二进制前缀。(默认值:False)

1.2 连接方法:

  begin()方法
    开始事务处理。

  close()
     发送退出消息并关闭端口。
    可以参见规范中的connection.close()
     触发:Error – 如果连接已经关闭

  commit()
    将更改提交到稳定存储器。
    参见规范中的connection.commit()

  cursor(sursor=None)
     创建新的游标以执行查询。
     参数:cursor – 要创建的游标类型;有Cursor、SSCursor、DictDursor或SSDictcursor。None表示使用Cursor。

  open
    如果连接是打开状态,则返回true

  ping(reconnect=true)
     检查服务器是否处于活动状态。
     参数:reconnect - 如果连接已关闭,请重新连接。
     触发:Error - 如果连接已关闭且Reconnect=false。

  rollback()
     回滚当前事务。
    参见规范中的connection.rollback()。

  select_db(db)
     设置当前数据库。
     参数:db – 使用数据库的名称。

  show_warnings()
     发送“SHOW WARNINGS”SQL命令。

2. 游标对象(Cursor Objects)

2.1 pymysql.cursors.cursor类(连接)

  这是用于与数据库交互的对象。
  不要自己创建游标实例。调用方法connections.connection.cursor()。
  参见规范中的游标方法:

callproc(procname,args=)
  用参数执行存储过程
  procname–格式为字符串,是要在服务器上执行的进程的名称
  args–程序要使用的参数序列
返回原始参数。
  兼容性警告1:PEP-249指定了必须返回任何已修改的参数,不过目前来说这是不可能的,因为只能先将它们存储在服务器变量中,然后通过查询进行检索才可用。但是由于存储过程返回零个或多个结果集,因此没有可靠的方法通过callproc来获取out或inout参数。服务器变量名为@procname_n,其中procname是上面的参数,n是参数的位置(从0开始)。一旦获取了该过程生成的所有结果集,就可以选取使用 @_procname_0,
… 查询使用execute()来获取任意out或inout值。
  兼容性警告2:调用存储过程本身的操作将创建一个空结果集,这个出现在进程生成的结果集之后。这是不符合DB-API标准的行为。必须使用nextset()来遍历所有结果集,否则可能会断开连接。

close()
  关闭游标只会清理所有遗留的数据。

excute(query,args=None)
  执行查询操作
   参数:
     query(str)–要执行的查询。
      args(tuple、list或dict)–用于查询的参数。(可选)
     returns:受影响的行数
    return type:int
  如果args是列表或元组,则可以将%s用作查询中的占位符。如果args是字典,则可以将%(name)s用作查询中的占位符。

executemany(query,args)
  针对一个查询使用多个数据
  参数:
   query–要在服务器上执行的查询
  args–序列或映射的序列。用作参数。
  returns:受影响的行数(如果有)。
这个方法提高了多行插入和替换的性能。否则,它相当于使用execute()循环参数。

fetchall()
  提取所有行

fetchmany(size=None)
  提取指定行

fetchone()
  提取下一行

max_stmt_length=1024000
  Executemany()方法生成的语句的最大长度。
   max_allowed_packet-packet_header_size是语句所允许的最大大小。
  max_allowed_packet的默认值是1048576。

mogrify(query,args=none)
  返回通过调用execute()方法发送到数据库的精确字符串。
  此方法遵循对DB API 2.0的扩展。

setinputsizes(*args).
  不执行任何操作,这是DB API所要求的。

setoutputsizes(*args).
  不执行任何操作,这是DB API所要求的。

2.2 pymysql.cursors.SScursor类(连接)

  无缓冲游标,主要用于返回大量数据的查询,或用于通过慢速网络连接到远程服务器。
  根据需要提取行,而不是将每一行数据复制到缓冲区中。这样做的好处是,客户机使用的内存要少得多,当通过慢速网络或结果集很大时,返回行的速度要快得多。
但也有局限性。MySQL协议不支持返回总行数,因此唯一的方法是遍历返回的每一行。此外,由于内存中只保存了当前行,因此当前无法向后滚动。

close()
关闭游标只会清理所有遗留的数据。

fetchall()
按mysqldb取全部。对于大型查询没什么用,因为它是缓冲的。如果需要没有缓冲的生成器版本,请参见fetchall_unbuffered()。

fetchall_unbuffered()
获取所有行,作为一个生成器实现。这不符合标准,但是,返回列表中的所有内容没有意义,因为这将使大型结果集占用大量的内存。

fetchmany(size=None)
  取出多行

fetchone()
  取下一行

read_next()
  读下一行

2.3 pymysql.cursors.dictcursor类(连接)

  以字典形式返回结果的游标。

2.4 pymysql.cursors.ssdictcursor类(连接)

  一种无缓冲的游标,它以字典的形式返回结果。

3. 连接范例:

  下面这个例子使用了一个简单的表,然后对它进行操作:

  #首先建个表
  CREATE TABLE `users` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `email` varchar(255) COLLATE utf8_bin NOT NULL,
      `password` varchar(255) COLLATE utf8_bin NOT NULL,
      PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
  AUTO_INCREMENT=1 ;
  import pymysql.cursors
  
  #然后连接数据库
  connection = pymysql.connect(host='localhost',
                               user='user',
                               password='passwd',
                               db='db',
                               charset='utf8mb4',
                               cursorclass=pymysql.cursors.DictCursor)
                               
  #对数据库进行操作
  try:
      with connection.cursor() as cursor:
          # 创建新记录
          sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
          cursor.execute(sql, ('webmaster@python.org', 'very-secret'))
  
      # 默认不会自动提交,所以需要我们自己提交来保存改变后的内容* 
      connection.commit()
  
      with connection.cursor() as cursor:
          # 读取单个记录
          sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
          cursor.execute(sql, ('webmaster@python.org',))
          result = cursor.fetchone()
          print(result)
  finally:
      connection.close()

这段语句将会输出:
     {‘password’: ‘very-secret’, ‘id’: 1}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值