python操做mysql(增、刪、改、查)

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

鏈接數據庫

前提:安裝mysql、python,參考:http://www.javashuo.com/article/p-dnexrcey-bg.htmlpython

數據庫qzcsjb的test表中初始化的數據:mysql

安裝pymysql模塊,pip install pymysqlsql

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('鏈接數據庫失敗')  

增長數據

單條

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()  

多條

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()

大批量新增

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;數據庫

單條

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() 

多條 

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語句部分不同,其他都同樣app

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

 多條

下面腳本和上面增長數據,除了執行sql語句部分不同,其他都同樣性能

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

查詢數據

fetchone

有點像從管道中取一個,若是再來一個fetchone,會又取下一個,若是取完了再取,就返回None測試

每條記錄爲元組格式fetch

下面腳本和上面增長數據,除了執行sql語句部分不同,其他都同樣3d

# 執行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

每條記錄爲字典格式

# 獲取遊標
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

# 獲取遊標
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

# 獲取遊標
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個

# 獲取遊標
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'}

相對當前位置移動
# 獲取遊標
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'} 

相關文章
相關標籤/搜索