• python学习笔记-day7-1-【python操作数据库】


    上次说到了Python操作数据库,这里继续补充python操作数据库,如何获取数据表里的所有字段值以及将数据导出来到excel里,作为excel表表头。

    一、上次说到封装一下mysql的操作

    1、装一下函数执行数据库操作
    #封装一下函数执行数据库操作
    def my_db(host,user, passwd, db,sql, port=3306, charset='utf8'):
    import pymysql
    conn = pymysql.connect(user=user,host=host,port=port,passwd=passwd,db=db,charset=charset)
    cur = conn.cursor() #建立游标
    cur.execute(sql) #执行mysql
    # res =cur.execute('select * from nhy WHERE username="xxx" and passwd="12345"')
    username = 'xxxxxx'
    passwd = '123456'
    sql = 'select * from table_name where name="%s" and passwd="%s"' % (username, passwd)
    res = cur.execute(sql)
    if sql.strip()[:6].upper() == 'SELECT':
    res = cur.fetchall() #res返回的是一个list
    if res:
    print('用户已经存在.')
    else:
    print('用户不存在')
    else:
    conn.commit()
    res = 'ok'
    cur.close()
    conn.close()
    return res

    这里的res = cur.fetchall() #res返回的是一个list
    如果需要获取结果集,则需要遍历整个二维数组。

    二、可以指定返回的结果类型,则需要在建立游标时,指定为dict类型的,如下:
    cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #建立游标的时候,指定了游标类型 ,返回就是一个字典了

    1、具体用法

    import pymysql
    def my_db(sql, port=3306, charset='utf8'):
    import pymysql
    host, user, passwd, db = '127.0.0.1','xxx','xxxxx','xxxx'

    conn = pymysql.connect(user=user,host=host,port=port,passwd=passwd,db=db,charset=charset)
    cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #建立游标的时候,指定了游标类型 ,返回就是一个字典了
    cur.execute(sql) #执行mysql
    if sql.strip()[:6].upper() == 'SELECT':
    res = ''
    res = cur.fetchall() #res返回的是一个list
    print(res)
    # res = cur.fetchone()
    # print(cur.fetchone())
    # print(cur.fetchone())
    # cur.fetchmany() #能传入一个数,返回多少条数据

    # fetchall() #获取到这个sql执行的全部结果,它把数据库里的每一行数据放到一个List里面
    # [['1','2','3']] [{} {} {}]
    #fetchone() #获取到这个sql执行的一条结果,它返回就只是一条数据
    #如果sql语句执行的结果是多条数据的时候,那就用fetchall()
    #如果能确定sql执行的结果是只有一条数据的时候,那就和fetchone()

    # print(cur.description)# 获取到的是数据表的字段描述
    #(('id', 3, None, 11, 11, 0, True), ('name', 253, None, 20, 20, 0, True), ('sex', 253, None, 20, 20, 0, True))
    #取表头
    # fileds = []
    # for filed in cur.description:
    # fileds.append(filed[0])
    fileds = [ filed[0] for filed in cur.description ] #列表生成式,与上面的结果一样
    print(fileds)
    # return fileds
    return res

    else:
    conn.commit()
    res = 'ok'
    cur.close()
    conn.close()
    return res

    sql= 'select * from stu limit 10;'
    res = my_db(sql)
    print(res)

    结果如下:
      res = cur.fetchall() #res返回的是一个list
    print(res)

    [{'id': 1, 'name': '娜娜', 'sex': '女'}, {'id': 1, 'name': '娜娜', 'sex': '女'}]

    fileds = [ filed[0] for filed in cur.description ] #列表生成式,与上面的结果一样
    print(fileds)
    结果如下:
    ['id', 'name', 'sex']

    2、查看具本体的帮助方法

    print(
    dir(pymysql.cursors) #这个可以打印出来ymysql.cursors都有哪些方法
    )

    结果:
    ['Cursor', 'DictCursor', 'DictCursorMixin', 'PY2', 'RE_INSERT_VALUES', 'SSCursor', 'SSDictCursor', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'absolute_import', 'err', 'partial', 'print_function', 'range_type', 're', 'text_type', 'warnings']


    总是想多努力一点的人
  • 相关阅读:
    学英语舌尖效应(转)
    winform程序防止重复运行
    label字符自动换行(转自网络)
    C# WINFORM中的combobox.items.add实现像web开发那样,添加显示内容text和实际value值
    三极管开关电路设计(转)
    ASPNET+ArcGIS+Flex初次使用笔记
    转:oracle日期函数集锦
    网站开发人员应该知道的62件事
    cassandra的安装与使用
    datejs一个很好用的时间日期JavaScript组件
  • 原文地址:https://www.cnblogs.com/shmily2018/p/9005931.html
Copyright © 2020-2023  润新知