pymysql 的簡單使用


一、環境

Windows  7 x64     python 3.7.1    pymysql 0.9.3  mysql5.6.43


 

二、pymysql的簡單使用

1、准備數據庫demo_temp

create database demo_temp;

 2、連接數據庫

import pymysql.cursors
connect = pymysql.connect(
    host='127.0.0.1',
    user='root',
    password='123',
    db='demo_temp',
    charset='utf8',
    cursorclass=pymysql.cursors.DictCursor
)

3、創建表

import pymysql.cursors
# 連接數據庫
connect = pymysql.connect(
    host='127.0.0.1',
    user='root',
    password='123',
    db='demo_temp',
    charset='utf8',
    cursorclass=pymysql.cursors.DictCursor
)
# 創建表users
with connect.cursor() as cursor:
    sql = """
    CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT ,
    user CHAR(30),
    passwd CHAR(20))
    """
    cursor.execute(sql)
connect.close()

4、一個簡單的增、刪、改、查實例

import pymysql.cursors
# 連接數據庫
connect = pymysql.connect(
    host='127.0.0.1',
    user='root',
    password='123',
    db='demo_temp',
    charset='utf8',
    cursorclass=pymysql.cursors.DictCursor
)

with connect.cursor() as cursor:   # 創建游標
    # 創建表
    sql = """
    CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT ,
    user CHAR(30),
    passwd CHAR(20))
    """
    cursor.execute(sql)
# 向表中插入數據 sql = """ INSERT INTO users (user,passwd) VALUES ('小明','123') """ cursor.execute(sql) connect.commit() # 插入數據后必須更新

# 查詢數據 sql = """ select * from users """ cursor.execute(sql) ret = cursor.fetchone() # 提取查詢數據 print(ret)
# 修改數據 sql = """ update users set user='葫蘆娃' where id=1 """ cursor.execute(sql) # 再次查詢數據 sql = """ select * from users """ cursor.execute(sql) ret = cursor.fetchone() # 提取查詢數據 print(ret) connect.close() # 關閉數據庫連接 # 打印內容如下 {'id': 1, 'user': '小明', 'passwd': '123'} {'id': 1, 'user': '葫蘆娃', 'passwd': '123'}

5、簡單的事務

import pymysql.cursors

# 連接數據庫
connect = pymysql.connect(
    host='127.0.0.1',
    user='root',
    password='123',
    db='demo_temp',
    charset='utf8',
    cursorclass=pymysql.cursors.DictCursor
)

try:
    with connect.cursor() as cursor:  # 創建游標
        # 插入數據
        sql = """
            INSERT INTO users (user,passwd) VALUES ('11111','123')
            """
        cursor.execute(sql)
        # 更新數據
        sql_1 = """
              update users set user='葫蘆娃' where id=1
        """
        cursor.execute(sql_1)
        raise NameError   # 更新數據時主動拋出異常

except Exception as e:
    connect.rollback()  # 事務回滾
connect.commit()

connect.close()  # 關閉數據庫連接

通過下面的小動畫我們可以看出,這里模擬在更新數據時出現問題。而插入數據時沒有問題的。然后執行事務回滾,最終數據沒有被寫入到數據庫中。


 

三、Connection中常用API

1、open() :檢測數據庫是否連接。

connect.open:如果數據庫連接返回Trhe,否則返回False。

2、ping(reconnect=True)

connect.ping(reconnect=True):如果reconnect=True表示連接斷開后,重新進行連接。

import pymysql.cursors

# 連接數據庫
connect = pymysql.connect(
    host='127.0.0.1',
    user='root',
    password='123',
    db='demo_temp',
    charset='utf8',
    cursorclass=pymysql.cursors.DictCursor
)
print(connect.open)  # 打印數據庫連接狀態
connect.close()  # 關閉數據庫連接
connect.ping(reconnect=True)  # 重新連接數據庫
print(connect.open)   # 打印數據庫連接狀態

 

 下面的小動畫向我們展示了當connect斷開連接后,使用connect.ping(reconnect=True)又重新連接到了數據庫。

3、rollback():回滾當前事務,用法在上面,這里就不再演示了。

4、select_db(db):切換數據庫。

# demo_test數據庫中users表數據
mysql> select * from users;
+----+-----------+--------+
| id | user      | passwd |
+----+-----------+--------+
|  1 | 小明      | 123    |
|  2 | 小剛      | 123    |
|  3 | 小紅      | 123    |
|  4 | 葫蘆娃    | 123    |
|  5 | 小明      | 123    |
+----+-----------+--------+

# demo_temp2庫中test表中數據
mysql> select * from test;
+------+------+----------+
| id   | user | password |
+------+------+----------+
|    1 | abc  | 123      |
+------+------+----------+

import pymysql.cursors

# 連接數據庫
connect = pymysql.connect(
    host='127.0.0.1',
    user='root',
    password='123',
    db='demo_temp',
    charset='utf8',
    cursorclass=pymysql.cursors.DictCursor
)
with connect.cursor() as cursor:   # 創建游標

    # 查詢demo_temp中users表的數據
    sql = """
        select * from users
        """
    cursor.execute(sql)
    ret = cursor.fetchall()  # 提取查詢數據
    print(ret)
    print('-'*80)
# 切換到demo_temp2數據庫,查詢test表的數據 connect.select_db('demo_temp2') sql = """ select * from test """ cursor.execute(sql) ret = cursor.fetchall() # 提取查詢數據 print(ret) connect.close() # 關閉數據庫連接 # 打印結果 [{'id': 1, 'user': '小明', 'passwd': '123'}, {'id': 2, 'user': '小剛', 'passwd': '123'}, {'id': 3, 'user': '小紅', 'passwd': '123'},
{'id': 4, 'user': '葫蘆娃', 'passwd': '123'}, {'id': 5, 'user': '小明', 'passwd': '123'}] -------------------------------------------------------------------------------- [{'id': 1, 'user': 'abc', 'password': '123'}]

5、cursor():創建游標對象,用於操作數據(增、刪、改、查)。

6、commit():提交請求,當向數據庫中插入數據時,需要使用commit()進行提交,否則數據將不能寫入數據庫。

7、close():關閉數據庫連接。


 

四、Cursor常用API

1、cursor.execute(query, args=None):執行sql語句。

參數:    

  • query (str):sql語句.
  • args (tuple, list or dict):sql語句中如果有變量,或者格式化輸出,會在這里填充數據。

Returns:返回一個int值,表示sql語句影響到的行數。

下面演示插入數據的四種方式:

import pymysql.cursors

# 連接數據庫
connect = pymysql.connect(
    host='127.0.0.1',
    user='root',
    password='123',
    db='demo_temp',
    charset='utf8',
    cursorclass=pymysql.cursors.DictCursor
)
with connect.cursor() as cursor:   # 創建游標

    # 第一種方式向表中插入數據
    sql = """
        INSERT INTO users (user,passwd) VALUES ('123','123')
        """
    cursor.execute(sql)

    # 第二種方式向表中插入數據
    sql = """
           INSERT INTO users (user,passwd) VALUES (%s,%s)
           """
    cursor.execute(sql,['456','456'])

    # 第三種方式向表中插入數據
    sql = """
               INSERT INTO users (user,passwd) VALUES (%s,%s)
               """
    cursor.execute(sql, ('789', '789'))

    # 第四種方式向表中插入數據
    sql = """
               INSERT INTO users (user,passwd) VALUES (%(a)s,%(b)s)  
               """
    cursor.execute(sql, {'a':'abc','b':'123'})  # 這里的'a'和'b'要和上面VALUES中對應
    connect.commit()  # 插入數據后必須更新
    # 查詢數據
    sql = """
        select * from users
        """
    cursor.execute(sql)
    ret = cursor.fetchall()  # 提取查詢數據
    print(ret)


connect.close()   # 關閉數據庫連接

 2、cursor.executemany(query, args):可以執行多條sql語句。
參數:    
query :sql語句
args:可迭代對象
Returns:返回sql語句影響到的行數。

下面是方法實例:

import pymysql.cursors

# 連接數據庫
connect = pymysql.connect(
    host='127.0.0.1',
    user='root',
    password='123',
    db='demo_temp',
    charset='utf8',
    cursorclass=pymysql.cursors.DictCursor
)
with connect.cursor() as cursor:   # 創建游標

    # 插入多條數據
    sql = """
               INSERT INTO users (user,passwd) VALUES (%s,%s)  
               """
    ret_row = cursor.executemany(sql,[['a','123'],['b','234'],['c','456']])  # 在args中傳入一個可迭代對象。
    connect.commit()  # 插入數據后必須更新
    print(f'當前受影響了{ret_row}行')

    # 查詢數據
    sql = """
        select * from users
        """
    cursor.execute(sql)
    ret = cursor.fetchall()  # 提取查詢數據
    print(ret)

connect.close()   # 關閉數據庫連接

3、cursor.fetchone():從查詢語句中獲取一條查詢結果。

4、cursor.fetchall():獲取所有查詢到的結果。

5、cursor.fetchmany(size):根據size獲取相應的行數。

6、cursor.mogrify(query, args=None):返回執行的sql語句,下面是示例:

import pymysql.cursors

# 連接數據庫
connect = pymysql.connect(
    host='127.0.0.1',
    user='root',
    password='123',
    db='demo_temp',
    charset='utf8',
    cursorclass=pymysql.cursors.DictCursor
)
with connect.cursor() as cursor:   # 創建游標
    sql = """
        select * from users
        """
    cursor.execute(sql)
    ret_sql = cursor.mogrify(sql)   # 返回執行的sql語句
    cursor.fetchmany(2)             # 提取查詢數據
    print(ret_sql)

connect.close()   # 關閉數據庫連接

 7、cursor.close():關閉游標,關閉游標后,游標內所有數據將被清空。

 參考文檔:https://pymysql.readthedocs.io/en/latest/

 


免責聲明!

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



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