请选择 进入手机版 | 继续访问电脑版

湖南新梦想

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 14|回复: 0

如何在Python中操作MySQL?(三)

[复制链接]

2775

主题

3174

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
11260
发表于 6 天前 | 显示全部楼层 |阅读模式
         3.5 无锁(报错)
  1.   #! /usr/bin/env python
  2.   # -*- coding: utf-8 -*-
  3.   # __author__ = "shuke"
  4.   # Date: 2018/5/13
  5.   import pymysql
  6.   import threading
  7.   CONN = pymysql.connect(host='127.0.0.1',
  8.                         port=3306,
  9.                         user='zff',
  10.                         password='zff123',
  11.                         database='zff',
  12.                         charset='utf8')
  13.   def task(arg):
  14.      cursor = CONN.cursor()
  15.      cursor.execute('select * from USER ')
  16.      # cursor.execute('select sleep(10)')
  17.      result = cursor.fetchall()
  18.      cursor.close()
  19.      print(result)
  20.   for i in range(10):
  21.      t = threading.Thread(target=task, args=(i,))
  22.      t.start()
复制代码

  此时可以在数据库中查看连接情况: show status like 'Threads%';
  四. 数据库连接池结合pymsql使用
  1.   # cat sql_helper.py
  2.   import pymysql
  3.   import threading
  4.   from DBUtils.PooledDB import PooledDB, SharedDBConnection
  5.   POOL = PooledDB(
  6.      creator=pymysql,  # 使用链接数据库的模块
  7.      maxconnections=20,  # 连接池允许的最大连接数,0和None表示不限制连接数
  8.      mincached=2,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
  9.      maxcached=5,  # 链接池中最多闲置的链接,0和None不限制
  10.      #maxshared=3,  # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
  11.      blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
  12.      maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
  13.      setsession=[],  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
  14.      ping=0,
  15.      # ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
  16.      host='192.168.11.38',
  17.      port=3306,
  18.      user='root',
  19.      passwd='apNXgF6RDitFtDQx',
  20.      db='m2day03db',
  21.      charset='utf8'
  22.   )
  23.   def connect():
  24.      # 创建连接
  25.      # conn = pymysql.connect(host='192.168.11.38', port=3306, user='root', passwd='apNXgF6RDitFtDQx', db='m2day03db')
  26.      conn = POOL.connection()
  27.      # 创建游标
  28.      cursor = conn.cursor(pymysql.cursors.DictCursor)
  29.      return conn,cursor
  30.   def close(conn,cursor):
  31.      # 关闭游标
  32.      cursor.close()
  33.      # 关闭连接
  34.      conn.close()
  35.   def fetch_one(sql,args):
  36.      conn,cursor = connect()
  37.      # 执行SQL,并返回收影响行数
  38.      effect_row = cursor.execute(sql,args)
  39.      result = cursor.fetchone()
  40.      close(conn,cursor)
  41.      return result
  42.   def fetch_all(sql,args):
  43.      conn, cursor = connect()
  44.      # 执行SQL,并返回收影响行数
  45.      cursor.execute(sql,args)
  46.      result = cursor.fetchall()
  47.      close(conn, cursor)
  48.      return result
  49.   def insert(sql,args):
  50.      """
  51.      创建数据
  52.      :param sql: 含有占位符的SQL
  53.      :return:
  54.      """
  55.      conn, cursor = connect()
  56.      # 执行SQL,并返回收影响行数
  57.      effect_row = cursor.execute(sql,args)
  58.      conn.commit()
  59.      close(conn, cursor)
  60.   def delete(sql,args):
  61.      """
  62.      创建数据
  63.      :param sql: 含有占位符的SQL
  64.      :return:
  65.      """
  66.      conn, cursor = connect()
  67.      # 执行SQL,并返回收影响行数
  68.      effect_row = cursor.execute(sql,args)
  69.      conn.commit()
  70.      close(conn, cursor)
  71.      return effect_row
  72.   def update(sql,args):
  73.      conn, cursor = connect()
  74.      # 执行SQL,并返回收影响行数
  75.      effect_row = cursor.execute(sql, args)
  76.      conn.commit()
  77.      close(conn, cursor)
  78.      return effect_row
复制代码
  PS: 可以利用静态方法封装到一个类中,方便使用。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|湖南新梦想 ( 湘ICP备18019834号-2 )

GMT+8, 2022-6-29 14:11 , Processed in 0.038878 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表