1. 程式人生 > >MySQLdb操作數據庫(二)

MySQLdb操作數據庫(二)

fetchall hone 集中 HERE host 操作數 方法 type exception

查詢數據

使用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

MySQLdb操作數據庫(二)