zoukankan      html  css  js  c++  java
  • python

    pymsql 模块

      基本应用介绍:

    # 安装模块
    pip install PyMySql
    
    # 导入模块
    import pymysql
    
    # 配置连接信息
    config = {
        'host':'127.0.0.1',
         'port':3306,
        'user':'root',
        'password':'12345678',
        'db':'anec',
        'charset':'utf8'
    }
    
    # 连接数据库
    db = pymysql.connect(**config)
    
    # 获取游标
    start = db.cursor()
    #默认获取数据的格式为元组格式
    
    cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
    #设置cursor设置为pymysql.cursors.DictCursor,可以将显示数据为 字典格式
    
    cursor.scroll(1,mode='relative')  # 相对当前位置移动
    cursor.scroll(2,mode='absolute') # 相对绝对位置移动
    # 第一个值为移动的行数,整数为向下移动,负数为向上移动,mode指定了是相对当前位置移动,还是相对于首行移动
    
    # 执行sql语句
    start.execute()
        # 执行单条语句
    start.executemany()
        # 执行多条语句
    
    #获取单条数据
    dp = start.fetchone()
    
    # 获取所有数据
    dp = start.fetchall()
    
    # 获取指定条数数据
    dp = start.fetchone(3)
        #获取3条数据
    
    # 关闭数据库连接
    db.close()
    
    # -------------------------------------------------
    
    # 使用预处理语句创建表
    sql = """CREATE TABLE test1 (
             FIRST_NAME  CHAR(20) NOT NULL,
             LAST_NAME  CHAR(20),
             AGE INT,  
             SEX CHAR(1),
             INCOME FLOAT )"""
    start.execute(sql)
    
    # -------------------------------------------------
    
    # SQL 查询语句
    sql = "SELECT * FROM EMPLOYEE WHERE INCOME > '%d'" % 1000
    try:
       # 执行SQL语句
       start.execute(sql)
       # 获取所有记录列表
       results = start.fetchall()
       for row in results:
          print (row)
    except:
       print ("Error: unable to fetch data")
    
    # -------------------------------------------------
    
    # SQL 插入语句
    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
             LAST_NAME, AGE, SEX, INCOME)
             VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
    # 可以
    sql2 = "INSERT INTO EMPLOYEE(FIRST_NAME, 
           LAST_NAME, AGE, SEX, INCOME) 
           VALUES ('%s','%s','%d','%c','%d')" % 
           ('Mac', 'Mohan', 20, 'M', 2000)
    try:
        # 执行sql语句
        start.execute(sql)
        # 提交到数据库执行
        db.commit()
    except:
        # 如果发生错误则回滚
        db.rollback()
    
    # -------------------------------------------------
    
    # SQL 更新语句
    sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
    try:
       # 执行SQL语句
       start.execute(sql)
       # 提交到数据库执行
       db.commit()
    except:
       # 发生错误时回滚
       db.rollback()
    
    # -------------------------------------------------
    
    # 使用 execute() 方法执行 SQL,如果表存在则删除
    start.execute("DROP TABLE IF EXISTS EMPLOYEE")
    
    # SQL 删除语句
    sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
    try:
       # 执行SQL语句
       start.execute(sql)
       # 提交修改
       db.commit()
    except:
       # 发生错误时回滚
       db.rollback()

      上下文管理协议(示例)

    # pymsql 支持 上下文管理协议
    import pymysql
    config={
        "host":"127.0.0.1",
        "user":"root",
        "password":"12345678",
        "database":"test"}
    db = pymysql.connect(**config)
    
    with db.cursor(cursor=pymysql.cursors.DictCursor) as cursor:
        #获取数据库连接的对象
        sql = "SELECT * FROM userinfo"
        cursor.execute(sql)
        res = cursor.fetchone()
        print(res)
        cursor.scroll(2,mode='relative')
        res = cursor.fetchone()
        print(res)
        cursor.close()
    db.close()

    简易封装pymysql类模块(数据表操作,查询/添加/修改/删除)

    import pymysql
    
    class Mysql:
    
        def __init__(self,db_dict):
            self.db = pymysql.connect(**db_dict)
            self.cursor = self.db.cursor(cursor=pymysql.cursors.DictCursor)
    
        def __del__(self):
            self.cursor.close()
            self.db.close()
    
        def query(self,info):
            self.cursor.execute(info)
            datainfo = self.cursor.fetchall()
            return datainfo
    
        def insert(self,tn,dict_data):
            '''
            :param tn: tablename 表名
            :param dict_data: key值为字段,value为数据值
            :return: 执行成功返回OK
            '''
            try:
                key = ','.join([k for k in dict_data])
                val = tuple([v for v in dict_data.values()])
                sql = """insert into %s(%s)values%s; """ % (tn,key,val)
                self.cursor.execute(sql)
                self.db.commit()
                return 'OK'
            except:
                self.db.rollback()
    
        def insert_many(self,tn,list_dict_data):
            '''
            :param tn: tablename 表名
            :param list_dict_data: 输入 list[dict{}] 数据类型,dict{key值为字段,value为数据值}
            :return: 执行成功返回OK
            '''
            try:
                for dict_data in list_dict_data:
                    key = ','.join([k for k in dict_data])
                    val = tuple([v for v in dict_data.values()])
                    sql = """insert into %s(%s)values%s; """ % (tn,key,val)
                    self.cursor.execute(sql)
                    self.db.commit()
                return 'OK'
            except:
                self.db.rollback()
    
        def update(self,tn,key,val,tj,**kwargs):
            try:
                sql = r"""update %s set %s = '%s'  where %s ;"""%(tn,key,val,tj)
                self.cursor.execute(sql)
                self.db.commit()
                return 'OK'
            except:
                self.db.rollback()
    
        def dele(self,tn,tj,**kwargs):
            try:
                sql = r"""delete from %s where %s""" % (tn,tj)
                self.cursor.execute(sql)
                self.db.commit()
                return 'OK'
            except:
                self.db.rollback()
    
        def dele_table(self,tn,mode=1):
            """
            :param tn: 表名
            :param mode: 模式1,只删除数据不删表
                          模式2,删除整个表
            :return: 返回OK 表示操作成功
            """
            try:
                if mode == 1:
                    sql ="""truncate %s;"""% tn
                    self.cursor.execute(sql)
                    self.db.commit()
                    return 'OK'
    
                elif mode == 2:
                    sql = """drop table %s;""" % tn
                    self.cursor.execute(sql)
                    self.db.commit()
                    return 'OK'
            except:
                self.db.rollback()
    
    config = {
        'host':'localhost',
         'port':3306,
        'user':'root',
        'password':'12345678',
        'db':'anec2',
        'charset':'utf8'
    }
    
    test1 = Mysql(config)
    #
    # # #查询数据
    # dp = test1.query("select * from t1")
    # for i in dp:
    #     print(i)
    
    # #插入单条 字典数据
    # dict_data = {'name':'小华','phone':998123,"email":"232323232@qq.com"}
    # dp = test1.insert('t2',dict_data)
    # print(dp)
    
    # # #插入多条列表[字典]数据 : [{'name':'alex3'},]
    # list_dict_data = [{'name':'小妹','phone':932323,"email":"2335433232@qq.com"},
    #                   {'name': '小佛', 'phone': 99421323, "email": "433232@qq.com"},
    #                   {'name': '小带', 'phone': 9932323, "email": "33445323232@qq.com"}]
    # dis = test1.insert_many('t2',list_dict_data)
    # print(dis)
    
    # # 修改数据信息
    # #方式一:
    # test1.update('t1', 'name', 'abcabc','id=64')
    #
    # #方式二:
    # x = {
    #     'tn':'t1',
    #     'key':'name',
    #     'val':"123",
    #     'tj':'id=63'}
    # test1.update(**x)
    
    # # # 删除数据
    # #方式一:
    # dp = test1.dele("t1","id >73")
    # print(dp)
    
    # #方式二:
    # x = {
    #     'tn':'t1',
    #     'tj':'id=73'}
    # dp = test1.dele(**x)
    # print(dp)
    
    # # 删除表
    # #mode = 1 ,只删除数据,不删表(默认值)
    # #mode = 2 ,删除整个表
    # dp= test1.dele_table('t1',mode=1)
    # print(dp)
  • 相关阅读:
    正则表达式
    Ajax跨域问题---jsonp
    Ajax
    字符串总结
    js 字符串加密
    jsDate()
    HDU 5430 Reflect
    HDU 5429 Geometric Progression
    HDU 5428 The Factor
    POJ 2485 Highways
  • 原文地址:https://www.cnblogs.com/Anec/p/9946267.html
Copyright © 2011-2022 走看看