• (六)6-2Mysql游标和连接池


    游标

    游标提供了一种对从表中检索出的数据进行操作的灵活手段,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL选择语句相关联因为游标由结果集(可以是零条、一条或相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。

    常用方法:
    cursor():创建游标对象
    close():关闭此游标对象
    fetchone():得到结果集的下一行
    fetchmany([size=cursor.arraysize]):得到结果集的下几行
    fetchall():得到结果集的所有行
    execute(sql[,args]):执行一个 数据库查询或命令
    executemany(sql,args):执行多个数据库查询或命令
    例子:

    connect.py

    #!/usr/bin/env python 
    #coding:utf8
    import MySQLdb
    def connect_mysql():
        db_config = {
            "host":"127.0.0.1",
            "port":3306,
            "user":"root",
            "passwd":"123456",
            "db":"world",
            "charset":"utf8",
        }
        try:
            cnx = MySQLdb.connect(**db_config)
        except Exception as e :
            raise e
        return  cnx
    #!/usr/bin/env python 
    #coding:utf8
    import MySQLdb
    from connect import  connect_mysql
    
    if __name__ == "__main__":
        sql = "select * from city"
        cnx = connect_mysql()
        cus = cnx.cursor()
        # print(dir(cus))
        try :
            cus.execute(sql)
            result = cus.fetchone()
            print(result)
    
            result1 = cus.fetchmany(3)
            print(result1)
            # result3 = cus.fetchall()
            # print(result3)
            cus.close()
        except Exception as e :
            cnx.rollback()
            raise e
        finally:
            cnx.close()

    mysql连接池

    Python DBUtils
    DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils来自Webware for Python。
    DBUtils提供两种外部接口:
    PersistentDB :提供线程专用的数据库连接,并自动管理连接。
    PooledDB :提供线程间可共享的数据库连接,并自动管理连接。
    下载地址:http://www.webwareforpython.org/downloads/DBUtils/
    或者Pip install DBUtils
    例子:

    #!/usr/bin/env python 
    #coding:utf8
    import MySQLdb
    from DBUtils.PooledDB import PooledDB
    
    db_config = {
        "host": "127.0.0.1",
        "port": 3306,
        "user": "root",
        "passwd": "123456",
        "db": "world",
        "charset": "utf8",
    }
    pool = PooledDB(MySQLdb,5,**db_config)
    
    if __name__ == "__main__":
        cnx = pool.connection()
        cus = cnx.cursor()
        sql = "select * from city"
        try:
            cus.execute(sql)
            result = cus.fetchone()
            print(result)
            cus.close()
            cnx.commit()
        except Exception as e :
            raise e
        finally:
            cnx.close()

    运行结果:

    (1L, u'Kabul', u'AFG', u'Kabol', 1780000L)
  • 相关阅读:
    SQLAlchemy使用merge
    Flask 处理文件 file
    PostgreSQL 常用命令
    Elasticsearch 常用命令
    Python3 encode中的unicode-escape和raw_unicode_escape
    Python 字符串16进制转换为字符串
    利用 Redis 实现接口频次限制
    Flask-Limiter 接口访问频次限制
    博客内容管理(2)-「解决方案」分类的内容设定和编写位置
    踩坑 | u盘 | u盘插入电脑无法识别打开
  • 原文地址:https://www.cnblogs.com/pythonlx/p/7875916.html
Copyright © 2020-2023  润新知