Python之mysql-pool
1.游标
游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL 选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。
常用方法:
cursor():创建游标对象
close():关闭此游标对象
fetchone():得到结果集的下一行
fetchmany([size = cursor.arraysize]):得到结果集的下几行
fetchall():得到结果集中剩下的所有行
excute(sql[, args]):执行一个数据库查询或命令
executemany (sql, args):执行多个数据库查询或命令
#!/usr/bin/env python # -*- coding:utf8 -*- # @Time : 2017/11/21 15:51 # @Author : hantong # @File : youbiao.py import MySQLdb def connect_mysql(): db_config = { "host":'10.3.1.113', "port":'3306', "user":'cn_uts', "passwd":'cn_uts', "db": 'mysql', "charset":'utf-8' } cnx = MySQLdb.connect(**db_config) #建立mysql连接对象 return cnx if __name__ == '__main__': cnx = connect_mysql() cus = cnx.cursor() #创建游标 sql = '''select * from test;''' try: cus.execute(sql) result1 = cus.fetchone() #在最终搜索的数据中去一条数据 print('result1:') print(result1) result2 = cus.fetchmany(1) #在接下来的数据中再去一行数据,后面的数字可以自定义 print('result2:') print(result2) result3 = cus.fetchall() #在所有的结果中搞出来所有的数据 print('result3:') print(result3) cus.close() cnx.commit() except Exception as e: cnx.rollback() print('error') raise e finally: cnx.close()2.数据库连接池
数据库连接池包:DBUtils
安装方式:pip install DBUtils
代码如下:
#!/usr/bin/env python # -*- coding:utf8 -*- # @Time : 2017/11/21 16:03 # @Author : hantong # @File : mysql_pool.py #!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/9/18 22:46 # @Author : lingxiangxiang # @File : demon4.py import MySQLdb from DBUtils.PooledDB import PooledDB def connect_mysql(): db_config = { "host":'10.3.1.113', "port":'3306', "user":'cn_uts', "passwd":'cn_uts', "db": 'mysql', "charset":'utf-8' } pool = PooledDB(MySQLdb, 5, **db_config) # 5为连接池里的最少连接数 conn = pool.connection() # 以后每次需要数据库连接就是用connection()函数获取连接就好了 cur = conn.cursor() SQL = "select * from tmp;" r = cur.execute(SQL) r = cur.fetchall() print(r) cur.close() conn.close() # PooledDB的参数: # 1. mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接 # 2. maxcached,最大的空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接 # 3. maxconnections,最大的连接数, # 4. blocking,当连接数达到最大的连接数时,在请求连接的时候,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于最大连接数,如果这个值是False,会报错, # 5. maxshared 当连接数达到这个数,新请求的连接会分享已经分配出去的连接