标签分类
技术文章
当前位置:主页 > 计算机编程 > python > MySQL数据库中pymysqlpool是如何使用

Python MySQL数据库中pymysqlpool使用方法

  • 发布时间:
  • 作者:码农之家原创
  • 点击:113

MySQL数据库中pymysqlpool是如何使用

这篇文章主要知识点是关于pymysqlpool,Python,MySQL,MySQL数据库中pymysqlpool是如何使用,浅谈MySQL在cmd和python下的常用操作 的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Python 3.5从零开始学
  • 类型:Python大小:41.5 MB格式:PDF出版:清华大学出版社作者:刘宇宙
立即下载

更多相关的学习资源可以参阅 程序设计电子书Python电子书Python视频、等栏目。

这篇文章主要跟大家介绍了关于Python MySQL数据库连接池组件pymysqlpool的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。

引言

pymysqlpool (本地下载)是数据库工具包中新成员,目的是能提供一个实用的数据库连接池中间件,从而避免在应用中频繁地创建和释放数据库连接资源。

Python MySQL数据库中pymysqlpool是如何使用的?

功能

  • 连接池本身是线程安全的,可在多线程环境下使用,不必担心连接资源被多个线程共享的问题;

  • 提供尽可能紧凑的接口用于数据库操作;

  • 连接池的管理位于包内完成,客户端可以通过接口获取池中的连接资源(返回 pymysql.Connection);

  • 将最大程度地与 dataobj 等兼容,便于使用;

  • 连接池本身具备动态增加连接数的功能,即 max_pool_size 和 step_size 会用于控制每次增加的连接数和最大连接数;

  • 连接池最大连接数亦动态增加,需要开启 enable_auto_resize 开关,此后当任何一次连接获取超时发生,均记为一次惩罚,并且将 max_pool_size 扩大一定倍数。

基本工作流程

注意,当多线程同时请求时,若池中没有可用的连接对象,则需要排队等待

  • 初始化后优先创建 step_size 个连接对象,放在连接池中;

  • 客户端请求连接对象,连接池会从中挑选最近没使用的连接对象返回(同时会检查连接是否正常);

  • 客户端使用连接对象,执行相应操作后,调用接口返回连接对象;

  • 连接池回收连接对象,并将其加入池中的队列,供其它请求使用。

 

|--------|        |--------------|
|  | <==borrow connection object== | Pool manager |
| Client |        |    |
|  | ==return connection object==> | FIFO queue |
|--------|        |--------------|

参数配置

  • pool_name: 连接池的名称,多种连接参数对应多个不同的连接池对象,多单例模式;

  • host: 数据库地址

  • user: 数据库服务器用户名

  • password: 用户密码

  • database: 默认选择的数据库

  • port: 数据库服务器的端口

  • charset: 字符集,默认为 ‘utf8'

  • use_dict_cursor: 使用字典格式或者元组返回数据;

  • max_pool_size: 连接池优先最大连接数;

  • step_size: 连接池动态增加连接数大小;

  • enable_auto_resize: 是否动态扩展连接池,即当超过 max_pool_size 时,自动扩展 max_pool_size;

  • pool_resize_boundary: 该配置为连接池最终可以增加的上上限大小,即时扩展也不可超过该值;

  • auto_resize_scale: 自动扩展 max_pool_size 的增益,默认为 1.5 倍扩展;

  • wait_timeout: 在排队等候连接对象时,最多等待多久,当超时时连接池尝试自动扩展当前连接数;

  • kwargs: 其他配置参数将会在创建连接对象时传递给 pymysql.Connection

使用示例

1、使用 cursor 上下文管理器(快捷方式,但每次获取都会申请连接对象,多次调用效率不高):

 

from pymysqlpool import ConnectionPool
config = {
 'pool_name': 'test',
 'host': 'localhost',
 'port': 3306,
 'user': 'root',
 'password': 'root',
 'database': 'test'
}
def connection_pool():
 # Return a connection pool instance
 pool = ConnectionPool(**config)
 pool.connect()
 return pool
# 直接访问并获取一个 cursor 对象,自动 commit 模式会在这种方式下启用
with connection_pool().cursor() as cursor:
 print('Truncate table user')
 cursor.execute('TRUNCATE user')
 print('Insert one record')
 result = cursor.execute('INSERT INTO user (name, age) VALUES (%s, %s)', ('Jerry', 20))
 print(result, cursor.lastrowid)
 print('Insert multiple records')
 users = [(name, age) for name in ['Jacky', 'Mary', 'Micheal'] for age in range(10, 15)]
 result = cursor.executemany('INSERT INTO user (name, age) VALUES (%s, %s)', users)
 print(result)
 print('View items in table user')
 cursor.execute('SELECT * FROM user')
 for user in cursor:
  print(user)
 print('Update the name of one user in the table')
 cursor.execute('UPDATE user SET name="Chris", age=29 WHERE id = 16')
 cursor.execute('SELECT * FROM user ORDER BY id DESC LIMIT 1')
 print(cursor.fetchone())
 print('Delete the last record')
 cursor.execute('DELETE FROM user WHERE id = 16')

2、使用 connection 上下文管理器:

 

import pandas as pd
from pymysqlpool import ConnectionPool
config = {
 'pool_name': 'test',
 'host': 'localhost',
 'port': 3306,
 'user': 'root',
 'password': 'root',
 'database': 'test'
}
def connection_pool():
 # Return a connection pool instance
 pool = ConnectionPool(**config)
 pool.connect()
 return pool
with connection_pool().connection() as conn:
 pd.read_sql('SELECT * FROM user', conn)
# 或者
connection = connection_pool().borrow_connection()
pd.read_sql('SELECT * FROM user', conn)
connection_pool().return_connection(connection)

更多测试请移步 test_example.py。

依赖

  • pymysql:将依赖该工具包完成数据库的连接等操作;

  • pandas:测试时使用了 pandas。

以上就是Python MySQL数据库中pymysqlpool是如何使用的?的详细内容,更多请关注码农之家其它相关文章!

浅谈MySQL在cmd和python下的常用操作

环境配置1:安装mysql,环境变量添加mysql的bin目录

环境配置2:python安装MySQL-Python

请根据自身操作系统下载安装,否则会报c ++ compile 9.0,import _mysql等错误

windows10 64位操作系统可到 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载安装MySQL-Python包,至于whl和tar.gz在windows和Linux下的安装方法可查看我的上一篇文章

一 、cmd命令下的操作:

连接mysql:mysql -u root -p

查看所有数据库:show databases;

创建test数据库:create database test;

删除数据库:drop database test;

使用(切换至)test数据库:use test;

查看当前数据库下的表:show tables;

创建UserInfo表:create table UserInfo(id int(5) NOT NULL auto_increment,username varchar(10),password varchar(20) NOT NULL,PRIMARY KEY(id));

删除表:drop table UserInfo;

判断数据是否存在:select * from UserInfo where name like 'elijahxb';

增数据:insert into UserInfo(username,password) value('eljiahxb','123456');

查数据:select * from UserInfo; select id from UserInfo; select username from UserInfo;

改数据:update UserInfo set username = 'Zus' where id=1; update UserInfo set username='Zus';

删数据:delete from UserInfo; delete from UserInfo where id=1;

断开连接:quit

二、python下的操作:

# -*- coding: utf-8 -*-
#!/usr/bin/env python

# @Time  : 2017/6/4 18:11
# @Author : Elijah
# @Site  : 
# @File  : sql_helper.py
# @Software: PyCharm Community Edition
import MySQLdb

class MySqlHelper(object):
  def __init__(self,**args):
    self.ip = args.get("IP")
    self.user = args.get("User")
    self.password = args.get("Password")
    self.tablename = args.get("Table")
    self.port = 3306
    self.conn = self.conn = MySQLdb.Connect(host=self.ip,user=self.user,passwd=self.password,port=self.port,connect_timeout=5,autocommit=True)
    self.cursor = self.conn.cursor()

  def Close(self):
    self.cursor.close()
    self.conn.close()
  def execute(self,sqlcmd):
    return self.cursor.execute(sqlcmd)
  def SetDatabase(self,database):
    return self.cursor.execute("use %s;"%database)
  def GetDatabasesCount(self):
    return self.cursor.execute("show databases;")
  def GetTablesCount(self):
    return self.cursor.execute("show tables;")
  def GetFetchone(self, table = None):
    if not table:
      table = self.tablename
    self.cursor.execute("select * from %s;"%table)
    return self.cursor.fetchone()
  def GetFetchmany(self,table=None,size=0):
    if not table:
      table = self.tablename
    count = self.cursor.execute("select * from %s;"%table)
    return self.cursor.fetchmany(size)
  def GetFetchall(self,table=None):
    '''
    :param table: 列表
    :return:
    '''
    if not table:
      table = self.tablename
    self.cursor.execute("select * from %s;"%table)
    return self.cursor.fetchall()
  def SetInsertdata(self,table=None,keyinfo=None,value=None):
    """
    :param table:
    :param keyinfo:可以不传此参数,但此时value每一条数据的字段数必须与数据库中的字段数一致。
            传此参数时,则表示只穿指定字段的字段值。
    :param value:类型必须为只有一组信息的元组,或者包含多条信息的元组组成的列表
    :return:
    """
    if not table:
      table = self.tablename
    slist = []
    if type(value)==tuple:
      valuelen = value
      execmany = False
    else:
      valuelen = value[0]
      execmany = True
    for each in range(len(valuelen)):
      slist.append("%s")
    valuecenter = ",".join(slist)
    if not keyinfo:
      sqlcmd = "insert into %s values(%s);"%(table,valuecenter)
    else:
      sqlcmd = "insert into %s%s values(%s);" % (table,keyinfo,valuecenter)
    print(sqlcmd)
    print(value)
    if execmany:
      return self.cursor.executemany(sqlcmd,value)
    else:
      return self.cursor.execute(sqlcmd, value)

以上这篇浅谈MySQL在cmd和python下的常用操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。

以上就是本次给大家分享的全部知识点内容总结,大家还可以在下方相关文章里找到等python文章进一步学习,感谢大家的阅读和支持。

上一篇:python编写三级while循环菜单代码分享

下一篇:《Python数据处理》pdf心得书评笔记

展开 +

收起 -

学习笔记
网友NO.335437

Python异步操作MySQL示例【使用aiomysql】

本文实例讲述了Python异步操作MySQL。分享给大家供大家参考,具体如下: 安装aiomysql 依赖 Python3.4+ asyncio PyMySQL 安装 pip install aiomysql 应用 基本的异步连接connection import asynciofrom aiomysql import create_poolloop = asyncio.get_event_loop()async def go(): async with create_pool(host='127.0.0.1', port=3306, user='root', password='', db='mysql', loop=loop) as pool: async with pool.get() as conn: async with conn.cursor() as cur: await cur.execute("SELECT 42;") value = await cur.fetchone() print(value)loop.run_until_complete(go()) 异步的连接池 pool import asyncioimport aiomysqlasync def test_example(loop): pool = await aiomysql.create_pool(host='127.0.0.1', port=3306, user='root', password='', db='mysql', loop=loop) async with pool.acquire() as conn: async with conn.cursor() as cur: await cur.execute("SELECT 42;") print(cur.description) (r,) = await cur.fetchone() assert r == 42 pool.close() await pool.wait_closed()loop = asyncio.get_event_loop()loop.run_until_complete(test_example(loop)) 对象关系映射SQLAlchemy - Object Relationship Mapping 可以随意定义表结构,轻松调用查询、插入等操作方法。 import asyncioimport sqlalchemy as safrom aiomysql.sa import create_enginemetadata = sa.MetaData()tbl = sa.Table('tbl', metadata, sa.Column('id', sa.Integer, primary_key=True), sa.Column('val', sa.String(255)))async def go(loop): engine = await create_engine(user='root', db='test_pymysql', host='127.0.0.1', p……

网友NO.131777

Python配置mysql的教程(必看)

下面小编就为大家带来一篇Python配置mysql的教程(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 Linux系统自带Python,且根据系统自带资源来对python配置mysql;安装需要已配置好正确的yum源; 在python未配置mysql的情形下,直接import MySQLdb的提示如下 import MySQLdb Traceback (most recent call last): File stdin, line 1, in module ImportError: No module named MySQLdb Linux系统中没有mysql-python的rpm安装包,这个资源需要从网上下载: https://sourceforge.net/projects/mysql-python 目前主流使用Python2.6或Python2.7版本,下载为 MySQL-python-1.2.3c1.tar.gz 下载后上传到Linux机器,放入非中文目录 tar -xf MySQL-python-1.2.3c1.tar.gz ,解压目录如下 [root@localhost home]# cd MySQL-python-1.2.3c1/[root@localhost MySQL-python-1.2.3c1]# ll总用量 240drwxr-xr-x. 5 root root 89 10月 12 12:27 build-rw-r--r--. 1 tianF enosoft 59580 3月 31 2009 ChangeLogdrwxr-xr-x. 2 root root 57 10月 12 12:27 distdrwxr-xr-x. 2 tianF enosoft 58 3月 31 2009 doc-rw-r--r--. 1 tianF enosoft 9716 2月 6 2009 ez_setup.py-rw-r--r--. 1 tianF enosoft 17989 2月 25 2007 GPL-rw-r--r--. 1 tianF enosoft 2935 3月 4 2007 HISTORY-rw-r--r--. 1 tianF enosoft 605 2月 11 2007 MANIFEST-rw-r--r--. 1 tianF enosoft 272 3月 9 2009 MANIFEST.in-rw-r--r--. 1 tianF enosoft 2098 3月 31 2009 metadata.cfg-rw-r--r--. 1 tianF enosoft 75431 3月 31 2009 _……

网友NO.606497

Python调用mysql更新数据的方法

这次给大家带来Python调用mysql更新数据的方法,Python调用mysql更新数据的注意事项有哪些,下面就是实战案例,一起来看一下。 本文实例讲述了Python通过调用mysql存储过程实现更新数据功能。分享给大家供大家参考,具体如下: 一、需求分析 由于管理费率配置错误,生成订单的还本付息表和订单表的各种金额,管理费之间的计算都有错误,需要进行数据订正。为此,为了造个轮子,以后省很多功夫,全部用程序去修正,不接入人工。 二、带参数mysql 存储过程创建 1、更新订单付息表(t_order_rapay) drop procedure if exists update_t_order_rapay;delimiter $$create procedure update_t_order_rapay(IN orderNo varchar(64))begin declare t_order_no varchar(64); set t_order_no=orderNo; UPDATE t_order_repay SET total_amount=principal+interest+round(manage_amount*0.0808/0.052,3)+breach_amount, left_amount=principal+interest+round(manage_amount*0.0808/0.052,3)+breach_amount, left_repay_manager=round(manage_amount*0.0808/0.052,3), manage_amount=round(manage_amount*0.0808/0.052,3) WHERE order_no=t_order_no;end $$delimiter; 2、更新订单表(t_order_info) drop procedure if exists update_t_order_info;delimiter $$create procedure update_t_order_info(IN orderNo varchar(64))begin declare t_order_no varchar(64); set t_order_no=orderNo; SELECT left_amount into @m1 from t_order_repay WHERE order_no=t_order_no ORDER BY plan_time LIMIT 1; U……

<
1
>

Copyright 2018-2019 xz577.com 码农之家

版权责任说明