1. 程式人生 > 實用技巧 >Python操作MySql(增、刪、改、查)

Python操作MySql(增、刪、改、查)

目錄

    閱讀目錄

    用python操作資料庫,特別是做效能測試造存量資料時特別簡單方便,比儲存過程方便多了。

    回到頂部

    連線資料庫

    前提:安裝mysql、python,參考:https://www.cnblogs.com/UncleYong/p/10530261.html

    資料庫qzcsjb的test表中初始化的資料:

    安裝pymysql模組,pip install pymysql

    ?
    123456789101112131415161718192021222324252627282930import pymysql# 建立資料庫連線conn=pymysql.connect(
    host='192.168.168.168',port=3306,user='root',password='mysql',db='qzcsbj',charset='utf8')# 獲取遊標cursor=conn.cursor()# 執行sql語句sql = 'select * from test where name = "%s" and id="%s"' %('qzcsbj1','1')rows=cursor.execute(sql) # 返回結果是受影響的行數# 關閉遊標cursor.close()# 關閉連線conn.close()# 判斷是否連線成功if rows >= 0:print
    ('連線資料庫成功')else:print('連線資料庫失敗')  
    回到頂部

    增加資料

    單條

    ?
    123456789101112131415161718192021222324252627import pymysql# 建立資料庫連線conn=pymysql.connect(host='192.168.168.168',port=3306,user='root',password='mysql',db='qzcsbj',charset='utf8')# 獲取遊標cursor=conn.cursor()# 執行sql語句sql='insert into test(id,name) values(%s,%s)'
    rows=cursor.execute(sql,('4','qzcsbj4'))# 提交conn.commit()# 關閉遊標cursor.close()# 關閉連線conn.close()  

    多條

    ?
    123456789101112131415161718192021222324252627import pymysql# 建立資料庫連線conn=pymysql.connect(host='192.168.168.168',port=3306,user='root',password='mysql',db='qzcsbj',charset='utf8')# 獲取遊標cursor=conn.cursor()# 執行sql語句sql='insert into test(id,name) values(%s,%s)'rows=cursor.executemany(sql,[('5','qzcsbj5'),('6','qzcsbj6'),('7','qzcsbj7')])# 提交conn.commit()# 關閉遊標cursor.close()# 關閉連線conn.close()

    大批量新增

    ?
    123456789101112131415161718192021222324252627282930import pymysql# 建立資料庫連線conn=pymysql.connect(host='192.168.168.168',port=3306,user='root',password='mysql',db='qzcsbj',charset='utf8')# 獲取遊標cursor=conn.cursor(pymysql.cursors.DictCursor)# 執行sql語句values=[]for i in range(100, 201):values.append((i, 'qzcsbj'+str(i)))sql='insert into test(id,name) values(%s,%s)'rows=cursor.executemany(sql,values)# 提交conn.commit()# 關閉遊標cursor.close()# 關閉連線conn.close()
    回到頂部

    修改資料

    把上面大批量新增的資料刪除,delete from test where id>=100;

    單條

    ?
    123456789101112131415161718192021222324252627import pymysql# 建立資料庫連線conn=pymysql.connect(host='192.168.168.168',port=3306,user='root',password='mysql',db='qzcsbj',charset='utf8')# 獲取遊標cursor=conn.cursor()# 執行sql語句sql='update test set name = %s where id = %s'rows=cursor.execute(sql,('qzcsbj','7'))# 提交conn.commit()# 關閉遊標cursor.close()# 關閉連線conn.close() 

    多條

    ?
    123456789101112131415161718192021222324252627import pymysql# 建立資料庫連線conn=pymysql.connect(host='192.168.168.168',port=3306,user='root',password='mysql',db='qzcsbj',charset='utf8')# 獲取遊標cursor=conn.cursor()# 執行sql語句sql='update test set name = %s where id = %s'rows=cursor.executemany(sql,[('全棧測試筆記5','5'),('全棧測試筆記6','6')])# 提交conn.commit()# 關閉遊標cursor.close()# 關閉連線conn.close()  

    回到頂部

    刪除資料

    單條

    下面指令碼和上面增加資料,除了執行sql語句部分不一樣,其餘都一樣

    ?
    123# 執行sql語句sql='delete from test where id = %s'rows=cursor.execute(sql,('1',))

    多條

    下面指令碼和上面增加資料,除了執行sql語句部分不一樣,其餘都一樣

    ?
    123# 執行sql語句sql='delete from test where id = %s'rows=cursor.executemany(sql,[('2'),('3')])

    回到頂部

    查詢資料

    fetchone

    有點像從管道中取一個,如果再來一個fetchone,會又取下一個,如果取完了再取,就返回None

    每條記錄為元組格式

    下面指令碼和上面增加資料,除了執行sql語句部分不一樣,其餘都一樣

    ?
    1234567# 執行sql語句rows=cursor.execute('select * from test;')print(cursor.fetchone())print(cursor.fetchone())print(cursor.fetchone())print(cursor.fetchone())print(cursor.fetchone())

    執行結果:

    (4, 'qzcsbj4')
    (5, '全棧測試筆記5')
    (6, '全棧測試筆記6')
    (7, 'qzcsbj')
    None

    每條記錄為字典格式

    ?
    12345678910# 獲取遊標cursor=conn.cursor(pymysql.cursors.DictCursor)# 執行sql語句rows=cursor.execute('select * from test;')print(cursor.fetchone())print(cursor.fetchone())print(cursor.fetchone())print(cursor.fetchone())print(cursor.fetchone())  

    執行結果:

    {'id': 4, 'name': 'qzcsbj4'}
    {'id': 5, 'name': '全棧測試筆記5'}
    {'id': 6, 'name': '全棧測試筆記6'}
    {'id': 7, 'name': 'qzcsbj'}
    None

    fetchmany

    ?
    123456# 獲取遊標cursor=conn.cursor(pymysql.cursors.DictCursor)# 執行sql語句rows=cursor.execute('select * from test;')print(cursor.fetchmany(2))  

    執行結果:

    [{'id': 4, 'name': 'qzcsbj4'}, {'id': 5, 'name': '全棧測試筆記5'}]

    fetchall

    ?
    1234567# 獲取遊標cursor=conn.cursor(pymysql.cursors.DictCursor)# 執行sql語句rows=cursor.execute('select * from test;')print(cursor.fetchall())print(cursor.fetchall())  

    執行結果:

    [{'id': 4, 'name': 'qzcsbj4'}, {'id': 5, 'name': '全棧測試筆記5'}, {'id': 6, 'name': '全棧測試筆記6'}, {'id': 7, 'name': 'qzcsbj'}]
    []

    相對絕對位置移動

    從頭開始跳過n個

    ?
    1234567# 獲取遊標cursor=conn.cursor(pymysql.cursors.DictCursor)# 執行sql語句rows=cursor.execute('select * from test;')cursor.scroll(3,mode='absolute')print(cursor.fetchone())

    執行結果:

    {'id': 7, 'name': 'qzcsbj'}

    相對當前位置移動
    ?
    12345678# 獲取遊標cursor=conn.cursor(pymysql.cursors.DictCursor)# 執行sql語句rows=cursor.execute('select * from test;')print(cursor.fetchone())cursor.scroll(2,mode='relative')print(cursor.fetchone())

    執行結果:

    {'id': 4, 'name': 'qzcsbj4'}
    {'id': 7, 'name': 'qzcsbj'}