十五、mysql(二)
发布日期:2021-10-31 07:31:26 浏览次数:13 分类:技术文章

本文共 2604 字,大约阅读时间需要 8 分钟。

curosr()

cursor游标是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。可以将游标当做一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理。

建立数据库连接之后,使用cursor提供的方法执行命令或者返回结果。

execute(self, query, args=None)执行一个数据库sql命令。executemany(self, query, args)执行多个数据库sql命令。callproc(self, procname, args=())执行存储过程。

上述方法返回结果为受影响的行数。返回结果

fetchall(self)接受全部的返回结果行。fetchmany(self, size=None)接受size条返回结果行。如果size值大于结果行的数量则返回cursor.arraysize条数据。fetchone(self)返回结果行的下一行。

上述方法返回结果为元组tuple。

import pymysqldef conn_mysql():    db_config={        'host': '127.0.0.1',        'port': 3306,        'user': 'root',        'password': '123456',        'db': 'mysql'    }    conn = pymysql.connect(**db_config)    return conncnm = conn_mysql()cus = cnm.cursor()sql = 'select host,user from user'try:    cus.execute(sql)    print(cus.fetchmany(size=1))    #输出结果:(('localhost', 'mysql.session'),)    print(cus.fetchall())    #输出结果:(('localhost', 'mysql.sys'), ('localhost', 'root'))    print(cus.fetchone())    #输出结果:None    cus.close()    #关闭游标对象    cnm.commit()    #正确则提交except Exception as e:    cnm.rollback()    #错误则回滚    print("错误")finally:    cnm.close()    #数据库连接需要关闭

说明:

执行该sql最后结果为3条,fetchall()、fetchmany()和fetchone()出现位置不同,则结果不同。
fetchmany(size=1) 取出结果集中的第一条。此时游标处于第二行开始位置。
fetchall() 取出结果集中的全部,也就是游标当前位置至结束,此时游标处于结果集末尾。
fetchone() 取出结果集中的下一条,此时游标处于末尾,返回None。
executemany说明
executemany()主要是针对一条sql需要执行多次,每次执行的参数不同情况。数据量较多时建议使用executemany()方法,速度较快。
下面是executemany()简单示例。

import pymysqlconn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='123456', db='test')cus = conn.cursor()sql = 'insert into test(id, name) values(%s, %s)'args = [(1, 'Alice'), (2, 'Bob'), (3, 'Cellary')]try:    print(cus.executemany(sql, args))    #输出结果:3except Exception as e:    print("执行出错:{0}".format(e))finally:    cus.close()    conn.commit()    conn.close()

数据库连接池

python编程中使用pymysql进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接mysql数据库请求时都是独立的额请求,比较浪费资源,而且访问数量达到一定数量时,对mysql性能会产生较大的影响。因此在实际使用过程中通常会使用数据库的连接池技术来访问数据库,从而实现资源复用。同时也可以保证数据库不会因为连接数过多而造成数据库宕机。

在python中DBUtils是一套数据库连接池包,提供2种接口。

  • PersistentDB :提供线程专用的数据库连接,并自动管理连接。
  • PooledDB :提供线程间可共享的数据库连接,并自动管理连接。
    下面使用PooledDB示例
import pymysqlfrom DBUtils.PooledDB import PooledDBfrom DBUtils.PooledDB import PooledDBdb_config = {        "host": "127.0.0.1",        "port": 3306,        "user": "root",        "passwd": "123456",        "db": "test",        # "charset": "utf8"    }spool = PooledDB(pymysql, 5, **db_config)  # 5为连接池里的最少连接数conn = spool.connection()  # 以后每次需要数据库连接就是用connection()函数获取连接cur = conn.cursor()SQL = "select * from test;"r = cur.execute(SQL)r = cur.fetchall()print(r)cur.close()conn.close()

转载地址:https://blog.csdn.net/weixin_39934221/article/details/80262730 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:十六、python操作SQLAlchemy(一)
下一篇:十四、python访问mysql

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月14日 14时41分26秒