MySQLdb操作数据库(二)

查询数据

使用execute()函数执行查询sql语句后,得到的只是受影响的行数,并不能真正拿到我们查询的内容。没关系,这里游标cursor中还提供了三种提取数据的方法:fetchone、fetchmany、fetchall,每个方法都会导致游标游动,所以必须注意游标的位置
cursor. fetchone()
获取游标所在处的一行数据,返回的是元组,没有则返回None,
cursor. fetchmany(size=None)
接收size条返回结果行。如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据。返回的结果是一个元组,元组的元素也是元组,由每行数据组成;
cursor. fetchall()
接收全部的返回结果行。返回的结果是一个元组,元组的元素也是元组,由每行数据组成;

注意:
这些函数返回的结果数据均来自exceute()函数查询的结果集。如果exceute()结果集中没有数据,将会返回空元组。

Fetchone示例

import MySQLdb
import random
try:
    conn = MySQLdb.connect(
        host = '127.0.0.1',
        user = 'root',
        passwd = "123456",
        port = 3306)

    conn.select_db('python')# 

    cur = conn.cursor()# 获取游标
    cur.execute("select * from user")
    while 1:
        res = cur.fetchone()
        if res is None:
        #表示已经取完结果集
            break
        print res
    cur.close()
    conn.commit()
    conn.close()
    print u"sql执行成功"
except Exception, e:
print e

从execute()函数的查询结果中取数据,以元组的形式返回游标所在处的一条数据,如果游标所在处没有数据,将返回空元组,该数据执行一次,游标向下移动一个位置。fetchone()函数必须跟exceute()函数结合使用,并且在exceute()函数之后使用

Fetchmany示例

import MySQLdb
import random
try:
    conn = MySQLdb.connect(
        host = '127.0.0.1',
        user = 'root',
        passwd = "123456",
        port = 3306)

    conn.select_db('python')# 选择pythonDB数据库

    cur = conn.cursor()# 获取游标
    cur.execute("select * from user")
    resTuple = cur.fetchmany(2)#2表示取两条数据
    print u"结果集类型:",type(resTuple)
    for i in resTuple:
        print i

    cur.close()
    conn.commit()
    conn.close()
    print u"sql执行成功"
except Exception, e:
print e

从exceute()函数结果中获取游标所在处的size条数据,并以元组的形式返回,元组的每一个元素都也是一个由一行数据组成的元组,如果size大于有效的结果行数,将会返回cursor.arraysize条数据,但如果游标所在处没有数据,将返回空元组。查询几条数据,游标将会向下移动几个位置。fetmany()函数必须跟exceute()函数结合使用,并且在exceute()函数之后使用

Fetchall示例

import MySQLdb
try:
    conn = MySQLdb.connect(
        host = '127.0.0.1',
        user = 'root',
        passwd = "123456",
        port = 3306)

    conn.select_db('python')# 选择pythonDB数据库

    cur = conn.cursor()# 获取游标
    cur.execute("select * from user limit 2")
    resSet = cur.fetchall()
    print u"共%s条数据:" %len(resSet)
    print resSet#元组

    cur.close()
    conn.commit()
    conn.close()
    print u"sql执行成功"
except Exception, e:
    print e

获取游标所在处开始及以下所有的数据,并以元组的形式返回,元组的每一个元素都也是一个由一行数据组成的元组,如果游标所在处没有数据,将返回空元组。执行完这个方法后,游标将移动到数据库表的最后

更新数据
更新单条数据

#conding=utf-8
import MySQLdb
import random
try:
    conn = MySQLdb.connect(
        host = '127.0.0.1',
        user = 'root',
        passwd = "123456",
        port = 3306)

    conn.select_db('python')

    cur = conn.cursor()# 获取游标
    #更新一条数据
    update = cur.execute("update user set password = 'huhongqiang' where name='tom0'")
    print u"修改语句受影响额行数:", update#为更新成功的条数
    #查询一条数据
    cur.execute("select * from user where name='tom0';")
    print cur.fetchone()

    cur.close()
    conn.commit()
    conn.close()
    print u"sql执行成功"
except MySQLdb.Error,e:
print e

批量更新数据

import MySQLdb
import random
try:
    conn = MySQLdb.connect(
        host = '127.0.0.1',
        user = 'root',
        passwd = "123456",
        port = 3306)

    conn.select_db('python')# 选择pythonDB数据库

    cur = conn.cursor()# 获取游标
      #批量更新数据

sql = "update user set password = %s where name=%s"
cur.executemany(sql, [('345', 'tom1'), ('123', 'tom2')])
#此处传入一个列表,列表元素是元组
#查看更新后的结果
    query = cur.execute("select *  from user where name in ('tom1','tom2')")
    print u"表中所有数据:"
    for i in cur.fetchall():
        print i

    cur.close()
    conn.commit()
    conn.close()
    print u"sql执行成功"
except Exception, e:
    print e

猜你喜欢

转载自blog.51cto.com/13496943/2150063