查詢數據
使用execute()函數執行查詢sql語句後,得到的只是受影響的行數,並不能真正拿到我們查詢的內容。沒關係,這裏遊標cursor中還提供了三種提取數據的方法:fetchone、fetchmany、fetchall,每個方法都會導致遊標遊動,所以必須注意遊標的位置
cursor. fetchone()
獲取遊標所在處的一行數據,返回的是元組,沒有則返回None,
cursor. fetchmany(size=None)
接收size條返回結果行。如果size的值大於返回的結果行的數量,則會返回cursor.arraysize條數據。返回的結果是一個元組,元組的元素也是元組,由每行數據組成;
cursor. fetchall()
接收全部的返回結果行。返回的結果是一個元組,元組的元素也是元組,由每行數據組成;
注意:
這些函數返回的結果數據均來自exceute()函數查詢的結果集。如果exceute()結果集中沒有數據,將會返回空元組。
fetchone示例
#encoding=utf-8
import pymysql
try:
conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "root",
passwd = "123456"
)
conn.select_db("pydb")
cursor = conn.cursor()
cursor.execute("select * from user")
while 1:
res = cursor.fetchone()
if res is not None:
print(res)
else:
break
cursor.close()
conn.close()
except pymysql.Error as e:
print("pymysql.Error %d: %s" %(e.args[0],e.args[1]))
從execute()函數的查詢結果中取數據,以元組的形式返回遊標所在處的一條數據,如果遊標所在處沒有數據,將返回空元組,該數據執行一次,遊標向下移動一個位置。fetchone()函數必須跟exceute()函數結合使用,並且在exceute()函數之後使用
fetchmany示例
#encoding=utf-8
import pymysql
try:
conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "root",
passwd = "123456"
)
conn.select_db("pydb")
cursor = conn.cursor()
cursor.execute("select * from user")
#此處取2條數據,返回一個包含2個元素的元組,元組的元素還是元組
resTuple = cursor.fetchmany(2)
print(type(resTuple))
for v in resTuple:
print(v)
cursor.close()
conn.close()
except pymysql.Error as e:
print("pymysql.Error %d: %s" %(e.args[0],e.args[1]))
從exceute()函數結果中獲取遊標所在處的size條數據,並以元組的形式返回,元組的每一個元素都也是一個由一行數據組成的元組,如果size大於有效的結果行數,將會返回cursor.arraysize條數據,但如果遊標所在處沒有數據,將返回空元組。查詢幾條數據,遊標將會向下移動幾個位置。fetmany()函數必須跟exceute()函數結合使用,並且在exceute()函數之後使用
fetchall示例
#encoding=utf-8
import pymysql
try:
conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "root",
passwd = "123456"
)
conn.select_db("pydb")
cursor = conn.cursor()
cursor.execute("select * from user")
resTuple = cursor.fetchall()
print("共%s 條數據" %len(resTuple))
print(type(resTuple))
print(resTuple)
cursor.close()
conn.close()
except pymysql.Error as e:
print("pymysql.Error %d: %s" %(e.args[0],e.args[1]))
獲取遊標所在處開始及以下所有的數據,並以元組的形式返回,元組的每一個元素都也是一個由一行數據組成的元組,如果遊標所在處沒有數據,將返回空元組。執行完這個方法後,遊標將移動到數據庫表的最後
更新數據
更新單條數據
#encoding=utf-8
import pymysql
try:
conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "root",
passwd = "123456"
)
conn.select_db("pydb")
cursor = conn.cursor()
res = cursor.execute("update user set name = 'hhq' where name = 'lucy0';")
print("受影響的行數: ",res)
cursor.execute("select * from user where name = 'hhq';")
print(cursor.fetchone())
cursor.close()
conn.commit()
conn.close()
except pymysql.Error as e:
print("pymysql.Error %d: %s" %(e.args[0],e.args[1]))
批量更新數據
#encoding=utf-8
import pymysql
try:
conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "root",
passwd = "123456"
)
conn.select_db("pydb")
cursor = conn.cursor()
sql = "update user set name = %s where name = %s;"
res = cursor.executemany(sql,[("hhq1","lucy1"),("hhq2","lucy2")])
print("受影響的行數: ",res)
cursor.execute("select * from user where name in ('hhq1','hhq2');")
for i in cursor.fetchall():
print(i)
cursor.close()
conn.close()
except pymysql.Error as e:
print("pymysql.Error %d: %s" %(e.args[0],e.args[1]))
刪除數據
刪除單條數據
#encoding=utf-8
import pymysql
try:
conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "root",
passwd = "123456"
)
conn.select_db("pydb")
cursor = conn.cursor()
sql = "delete from user where name = 'lucy17';"
res = cursor.execute(sql)
print("受影響的行數: ",res)
cursor.close()
conn.close()
except pymysql.Error as e:
print("pymysql.Error %d: %s" %(e.args[0],e.args[1]))
批量刪除多條數據
#encoding=utf-8
import pymysql
try:
conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "root",
passwd = "123456"
)
conn.select_db("pydb")
cursor = conn.cursor()
sql = "delete from user where name = %s;"
res = cursor.executemany(sql,[('lucy20',),('lucy21',)])#需要傳元組
print("受影響的行數: ",res)
cursor.close()
conn.close()
except pymysql.Error as e:
print("pymysql.Error %d: %s" %(e.args[0],e.args[1]))
回滾事務
#encoding=utf-8
import pymysql
try:
conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "root",
passwd = "123456"
)
conn.select_db("pydb")
cursor = conn.cursor()
cursor.execute("select * from user;")
res = cursor.fetchall()
print("更新前的數據: ",res[-1])
cursor.execute("update user set name = 'hhq'")
cursor.execute("select * from user;")
res1 = cursor.fetchall()
print("更新後的數據: ",res1[-1])
#回滾事務
conn.rollback()
cursor.execute("select * from user;")
res1 = cursor.fetchall()
print("回滾後的數據: ",res1[-1])
cursor.close()
#提交事務
conn.commit()
conn.close()
except pymysql.Error as e:
print("pymysql.Error %d: %s" %(e.args[0],e.args[1]))
重置遊標位置
scroll(value, mode='relative')
移動指針到參數value指定的行;
Mode = relative則表示從當前所在行前移value行
Mode=absolute表示移動到絕對位置的value行。遊標索引從0開始
cursor.rownumber
返回當前遊標所在位置
示例:
#encoding=utf-8
import pymysql
try:
conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "root",
passwd = "123456"
)
conn.select_db("pydb")
cursor = conn.cursor()
cursor.execute("select * from user;")
print("遊標當前位置:" ,cursor.rownumber)
print(cursor.fetchone())
print("遊標當前位置:" ,cursor.rownumber)
cursor.scroll(0,mode="absolute")
print("遊標當前位置:" ,cursor.rownumber)
cursor.fetchmany(2)
print("遊標當前位置:" ,cursor.rownumber)
except pymysql.Error as e:
print("pymysql.Error %d: %s" %(e.args[0],e.args[1]))
#encoding=utf-8
import pymysql
try:
conn = pymysql.connect(
host = "127.0.0.1",
port = 3306,
user = "root",
passwd = "123456"
)
conn.select_db("pydb")
cursor = conn.cursor()
cursor.execute("select * from user;")
print("遊標當前位置:" ,cursor.rownumber)
res = cursor.fetchmany(2)
print(res)
print("遊標當前位置:" ,cursor.rownumber)
cursor.scroll(3,mode="relative")#遊標會向前移動3,對應數據庫表就是向後移動3行
print("遊標當前位置:" ,cursor.rownumber)
print(cursor.fetchone())
except pymysql.Error as e:
print("pymysql.Error %d: %s" %(e.args[0],e.args[1]))
Python操作MySQL(2)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.