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


目錄

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

    連接數據庫

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

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

    安裝pymysql模塊,pip install pymysql

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    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 ( '連接數據庫失敗' )  

    增加數據

    單條

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    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()  

    多條

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    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()

    大批量新增

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    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;

    單條

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    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() 

    多條 

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    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語句部分不一樣,其余都一樣

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

     多條

    下面腳本和上面增加數據,除了執行sql語句部分不一樣,其余都一樣

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

    查詢數據

    fetchone

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

    每條記錄為元組格式

    下面腳本和上面增加數據,除了執行sql語句部分不一樣,其余都一樣

    ?
    1
    2
    3
    4
    5
    6
    7
    # 執行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

    每條記錄為字典格式

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 獲取游標
    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

    ?
    1
    2
    3
    4
    5
    6
    # 獲取游標
    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

    ?
    1
    2
    3
    4
    5
    6
    7
    # 獲取游標
    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個

    ?
    1
    2
    3
    4
    5
    6
    7
    # 獲取游標
    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'}

    相對當前位置移動
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    # 獲取游標
    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'} 

    ============================== 重要提醒 =============================

    > > > 1、微信公眾號:全棧測試筆記


    > > > 2、技術交流Q群:652122175


    > > > 3、性能測試從0到實戰: https://www.cnblogs.com/uncleyong/p/12311432.html


    > > > 4、自動化測試實戰: https://www.cnblogs.com/uncleyong/p/12016690.html


    > > > 5、測試匯總:
    https://www.cnblogs.com/uncleyong/p/10530261.html


    > > > 6、聲明:本文部分內容可能來源或整理自網絡,如有侵權,請聯系刪除。


    ================================ END ================================
    <div id="blog_post_info">
    
    2
    0
    <div class="clear"></div>
    <div id="post_next_prev">
    
    <a href="https://www.cnblogs.com/uncleyong/p/10931195.html" class="p_n_p_prefix">« </a> 上一篇:    <a href="https://www.cnblogs.com/uncleyong/p/10931195.html" title="發布於 2019-05-26 15:59">mysql,本地連接看到的數據庫不全,遠程連接看到的數據庫是完整的</a>
    <br>
    <a href="https://www.cnblogs.com/uncleyong/p/10990062.html" class="p_n_p_prefix">» </a> 下一篇:    <a href="https://www.cnblogs.com/uncleyong/p/10990062.html" title="發布於 2019-06-01 10:09">JMeter基礎【第六篇】JMeter5.1事務、檢查點、集合點、思考時間、其余設置等</a>
    


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM