pymysql 的簡單使用

1、環境

Windows  7 x64     python 3.7.1    pymysql 0.9.3  mysql5.6.43python


 

2、pymysql的簡單使用

一、準備數據庫demo_tempmysql

create database demo_temp;

 二、鏈接數據庫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
)

三、建立表數據庫

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

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

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'}

五、簡單的事務

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()  # 關閉數據庫鏈接

經過下面的小動畫咱們能夠看出,這裏模擬在更新數據時出現問題。而插入數據時沒有問題的。而後執行事務回滾,最終數據沒有被寫入到數據庫中。動畫


 

3、Connection中經常使用API

一、open() :檢測數據庫是否鏈接。spa

connect.open:若是數據庫鏈接返回Trhe,不然返回False。code

二、ping(reconnect=True)對象

connect.ping(reconnect=True):若是reconnect=True表示鏈接斷開後,從新進行鏈接。blog

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)又從新鏈接到了數據庫。

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

四、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'}]

五、cursor():建立遊標對象,用於操做數據(增、刪、改、查)。

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

七、close():關閉數據庫鏈接。


 

4、Cursor經常使用API

一、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()   # 關閉數據庫鏈接

 二、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()   # 關閉數據庫鏈接

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

四、cursor.fetchall():獲取全部查詢到的結果。

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

六、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()   # 關閉數據庫鏈接

 七、cursor.close():關閉遊標,關閉遊標後,遊標內全部數據將被清空。

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

相關文章
相關標籤/搜索