用python操作數據庫,特別是做性能測試造存量數據時特別簡單方便,比存儲過程方便多了。
連接數據庫
前提:安裝mysql、python,參考:https://www.cnblogs.com/UncleYong/p/10530261.html
數據庫qzcsjb的test表中初始化的數據:

安裝pymysql模塊,pip install pymysql
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語句部分不一樣,其余都一樣
# 執行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
每條記錄為元組格式
下面腳本和上面增加數據,除了執行sql語句部分不一樣,其余都一樣
# 執行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'}
