• python MySQLdb学习笔记


    MySQLdb是Python访问MySql的连接库,最近项目中需要使用,将学习使用所得整理如下。

    由于我是windows环境,安装很简单,到这里下载一个.windows环境下载exe版本,直接双击安装很方便.

    MySQLdb windows下运行需要 libmySQL.dll、libmmd.dll 和 libguide40.dll ,可以放在sitepackage下也可以在windows\system32\ 
    学习MySQLdb的使用,下面的文档必不可少:

    MySQLdb用户指南 MySQLdb文档


    言归正传,如何使用MySQLdb呢,其实和Python内置的sqlite3的使用方法基本相同,简单说就是以下四个步骤:
    1. 建立数据库连接,取得Cursor对象
    2. 执行sql语句,接收返回值
    3. 根据执行情况,提交或者回滚数据库。
    4. 关闭Cursor,关闭数据库连接
    1,引入MySQLdb库建立和数据库的连接
    import MySQLdb
    conn=MySQLdb.connect(host="localhost",user="root",passwd="123456",db="appdb")
    

    参数定义:
    host:数据库主机名.默认是用本地主机.
    user:数据库登陆名.默认是当前用户.
    passwd:数据库登陆的秘密.默认为空.
    db:要使用的数据库名.没有默认值.
    port:MySQL服务使用的TCP端口.默认是3306.
    连接对象提供了对事务操作的支持:
    commit()rollback()

    2,执行sql语句和接收返回值
    cursor=conn.cursor()
    n=cursor.execute(sql,param)
    建立建立连接后,首先就要获取一个Cursor对象,因为以后的数据库操作都要通过它来进行。那么Cursor对象都有哪些方法呢?Cursor对象的主要有以下方法:
    • callproc(self, procname, args):执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
    • execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
    • executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
    • nextset(self):移动到下一个结果集
    • fetchall(self):接收全部的返回结果行.
    • fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
    • fetchone(self):返回一条结果行.
    • scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一行移动value条.

    下面是具体进行数据库操作的示意代码:

    插入数据:
    #使用sql语句,这里要接收的参数用%s表示,它就是一个占位符,无论代表的数据是什么类型,都用%s来表示
    sql="insert into operator values(%s,%s,%s,%s,%s)"
    #参数应该为tuple或者list
    ps=(id,name,age,sex,password)
    #执行,如果成功,n的值为1
    n=cursor.execute(sql,ps)

    查询数据:

    cursor.execute("select * from operator")
    #fetchall方法返回的全部结果.每条结果都是一个tuple类型的数据,rs就是tuple组成的tuple
    rs=cursor.fetchall()
    #可以这样使用结果集
    print rs[0][3]
    #或者直接显示出来,看看结果集的真实样子
    print rs



    #实际数据形式应该是这样的:((1,'zhang',25,'male','123'),(2,'wang',28,'male','1123'))

    批量插入数据:

    sql="insert into operator values(%s,%s,%s,%s,%s)"
    #参数同样需要一个tuple组成的tuple,当然tuple组成的list也是可以的
    ps=((1,'zhang',25,'male','123'),(2,'wangxia',28,'female','1123'))
    #使用executemany方法来批量的插入数据。
    n=cursor.executemany(sql,ps)



    3,根据执行情况,提交或者回滚数据库:

    conn.commit()

    4,关闭数据库连接
    首先关闭Cursor对象,然后是连接对象:

    cursor.close()
    conn.close()

    另,MySQLdb默认情况下,查询结果行都是返回tuple,访问的时候不是很方便,必须按照0,1这样读取。以前使用sqllite3的时候,可以修改过Connection对象的row_factory属性,以便使用sqlite3.Row,这样结果集中的数据行就是字典形式的,可以用字段名访问,那么MySQLdb中是不是也有这样的方法呢,经过在网上搜索发现,MySQLdb中有DictCursor,要做到这点也很简单,那就是建立数据库连接是传递cusorclass参数,或者在获取Cursor对象时传递cusorclass参数即可:

    import MySQLdb
    import MySQLdb.cursors
    conn=MySQLdb.connect(host="localhost",user="root",passwd="123456",db="appdb",cursorclass=MySQLdb.cursors.DictCursor)
    cursor=conn.cursor();

    或者
    import MySQLdb
    import MySQLdb.cursors
    conn=MySQLdb.connect(host="localhost",user="root",passwd="123456",db="appdb")
    cursor=conn.cursor(cursorclass=MySQLdb.cursors.DictCursor);



    然后我们上面例子中的查询结果就会变成下面这个样子的:

    ({id:1,name:'zhang',age:25,sex:'male',password:'123'}.....)

  • 相关阅读:
    58同城2018提前批前端笔试题总结
    两栏式布局和三栏式布局
    Less学习总结
    网易2018提前批前端笔试编程题
    编写一个函数isMerge,判断一个字符串str是否可以由其他两个字符串part1和part2“组合”而成
    【转】 解释下浏览器是如何判断元素是否匹配某个 CSS 选择器?
    JS数组精简的十三个技巧
    Docker常用命令(命令大全)
    ES6之新的数据结构
    JavaScript高级程序设计(第3版)每章小结(1-5)
  • 原文地址:https://www.cnblogs.com/dajianshi/p/2827104.html
Copyright © 2020-2023  润新知