Windows 7 x64 python 3.7.1 pymysql 0.9.3 mysql5.6.43python
一、準備數據庫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() # 關閉數據庫鏈接
經過下面的小動畫咱們能夠看出,這裏模擬在更新數據時出現問題。而插入數據時沒有問題的。而後執行事務回滾,最終數據沒有被寫入到數據庫中。動畫
一、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():關閉數據庫鏈接。
一、cursor.execute(query, args=None):執行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/