Python操作MySql(增、刪、改、查)
目錄
閱讀目錄
用python操作資料庫,特別是做效能測試造存量資料時特別簡單方便,比儲存過程方便多了。
回到頂部連線資料庫
前提:安裝mysql、python,參考:https://www.cnblogs.com/UncleYong/p/10530261.html
資料庫qzcsjb的test表中初始化的資料:
安裝pymysql模組,pip install pymysql
?123456789101112131415161718192021222324252627282930 | import 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 ( '連線資料庫失敗' ) |
增加資料
單條
?123456789101112131415161718192021222324252627 | import 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() |
多條
?123456789101112131415161718192021222324252627 | import 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() |
大批量新增
?123456789101112131415161718192021222324252627282930 | import 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;
單條
?123456789101112131415161718192021222324252627 | import 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() |
多條
?123456789101112131415161718192021222324252627 | import 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'}