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
MySQLdb操作數據庫(二)