PyMySQL 是在 Python3.x 版本中用於鏈接 MySQL 服務器的一個庫,Python2中則使用mysqldb。
Django中也可使用PyMySQL鏈接MySQL數據庫。mysql
安裝:sql
pip install pymysql
注意:數據庫
在進行本文如下內容以前須要注意:
• 你有一個MySQL數據庫,而且已經啓動。
• 你有能夠鏈接該數據庫的用戶名和密碼
• 你有一個有權限操做的database服務器
鏈接數據庫:ide
方式一:(有bug)fetch
import pymysql inputName = input('name:') inputPwd = input('pwd:') # 鏈接database conn = pymysql.connect(host="localhost", database="db1", user="root", password="123456", charset="utf8") cursor = conn.cursor() # 獲得一個能夠執行SQL語句的光標對象 sql = "select * from userinfo where name='%s' and pwd = '%s';" % (inputName, inputPwd) # '%s'這個引號要帶上 print(sql) ret = cursor.execute(sql) # 執行SQL語句 cursor.close() # 關閉光標 conn.close() # 關閉數據庫鏈接 if ret: print('登陸成功') else: print('登陸失敗')
運行:spa
第一種狀況: 輸入: name: zhou' -- kitty12322343 # 至關於把後面的都給註釋了 pwd: abcd 輸出: select * from userinfo where name='zhou' -- kitty12322343' and pwd = 'abcd'; 登陸成功 第二種狀況: 輸入: name:kitty' or 1=1 -- haha # 1=1就是True pwd:abcd 輸出: select * from userinfo where name='kitty' or 1=1 -- haha' and pwd = 'abcd'; 登陸成功
正確的連接數據庫姿式:code
import pymysql inputName = input('name:') inputPwd = input('pwd:') # 鏈接database conn = pymysql.connect(host="localhost", database="db1", user="root", password="123456", charset="utf8") cursor = conn.cursor() # 獲得一個能夠執行SQL語句的光標對象 sql = "select * from userinfo where name=%s and pwd=%s;" # %s也不用加引號了 print(sql) ret = cursor.execute(sql, [inputName, inputPwd]) # 執行SQL語句 # 經過這種方式傳參數,就沒有bug了 ============================ 字典方式: cursor.execute("select * from userinfo where name=%(user)s and pwd=(pwd)%s;" , {'user'='zhou', 'pwd'='123'} ) ============================ cursor.close() # 關閉光標 conn.close() # 關閉數據庫鏈接 if ret: print('登陸成功') else: print('登陸失敗')
一、增對象
# 導入pymysql模塊 import pymysql # 鏈接database conn = pymysql.connect(host=「你的數據庫地址」, user=「用戶名」,password=「密碼」,database=「數據庫名」,charset=「utf8」) # 獲得一個能夠執行SQL語句的光標對象 cursor = conn.cursor() sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);" username = "zhou" age = 18 # 執行SQL語句 cursor.execute(sql, [username, age]) # 提交事務 conn.commit() cursor.close() conn.close()
插入數據失敗回滾:
-------------- conn.rollback()blog
# 導入pymysql模塊 import pymysql # 鏈接database conn = pymysql.connect(host=「你的數據庫地址」, user=「用戶名」,password=「密碼」,database=「數據庫名」,charset=「utf8」) # 獲得一個能夠執行SQL語句的光標對象 cursor = conn.cursor() sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);" username = "zhou" age = 18 try: # 執行SQL語句 cursor.execute(sql, [username, age]) # 提交事務 conn.commit() except Exception as e: # 有異常,回滾事務 conn.rollback() cursor.close() conn.close()
批量執行操做:
-------------executemany()
# 導入pymysql模塊 import pymysql # 鏈接database conn = pymysql.connect(host=「你的數據庫地址」, user=「用戶名」,password=「密碼」,database=「數據庫名」,charset=「utf8」) # 獲得一個能夠執行SQL語句的光標對象 cursor = conn.cursor() sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);" data = [("zhou", 18), ("zhi", 20), ("long", 21)] try: # 批量執行多條插入SQL語句 cursor.executemany(sql, data) # 提交事務 conn.commit() except Exception as e: # 有異常,回滾事務 conn.rollback() cursor.close() conn.close()
獲取插入數據的ID(關聯表格操做時會用到)
------------- cursor.lastrowid
# 導入pymysql模塊 import pymysql # 鏈接database conn = pymysql.connect(host=「你的數據庫地址」, user=「用戶名」,password=「密碼」,database=「數據庫名」,charset=「utf8」) # 獲得一個能夠執行SQL語句的光標對象 cursor = conn.cursor() sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);" username = "zhou" age = 18 try: # 執行SQL語句 cursor.execute(sql, [username, age]) # 提交事務 conn.commit() # 提交以後,獲取剛插入的數據的ID last_id = cursor.lastrowid except Exception as e: # 有異常,回滾事務 conn.rollback() cursor.close() conn.close()
二、刪
# 導入pymysql模塊 import pymysql # 鏈接database conn = pymysql.connect(host=「你的數據庫地址」, user=「用戶名」,password=「密碼」,database=「數據庫名」,charset=「utf8」) # 獲得一個能夠執行SQL語句的光標對象 cursor = conn.cursor() sql = "DELETE FROM USER1 WHERE id=%s;" try: cursor.execute(sql, [4]) # 提交事務 conn.commit() except Exception as e: # 有異常,回滾事務 conn.rollback() cursor.close() conn.close()
三、改
# 導入pymysql模塊 import pymysql # 鏈接database conn = pymysql.connect(host=「你的數據庫地址」, user=「用戶名」,password=「密碼」,database=「數據庫名」,charset=「utf8」) # 獲得一個能夠執行SQL語句的光標對象 cursor = conn.cursor() # 修改數據的SQL語句 sql = "UPDATE USER1 SET age=%s WHERE name=%s;" username = "kitty" age = 88 try: # 執行SQL語句 cursor.execute(sql, [age, username]) # 提交事務 conn.commit() except Exception as e: # 有異常,回滾事務 conn.rollback() cursor.close() conn.close()
四、查
查詢單條數據:
# 導入pymysql模塊 import pymysql # 鏈接database conn = pymysql.connect(host=「你的數據庫地址」, user=「用戶名」,password=「密碼」,database=「數據庫名」,charset=「utf8」) # 獲得一個能夠執行SQL語句的光標對象 cursor = conn.cursor() # 查詢數據的SQL語句 sql = "SELECT id,name,age from USER1 WHERE id=1;" # 執行SQL語句 cursor.execute(sql) # 獲取單條查詢數據 ret = cursor.fetchone() cursor.close() conn.close() # 打印下查詢結果 print(ret) # (1, 'zhou', '123456') 從光標開始處,拿到一條數據,拿到數據後,光標向下移動一行
查詢多條數據:
# 導入pymysql模塊 import pymysql # 鏈接database conn = pymysql.connect(host=「你的數據庫地址」, user=「用戶名」,password=「密碼」,database=「數據庫名」,charset=「utf8」) # 獲得一個能夠執行SQL語句的光標對象 cursor = conn.cursor() # 查詢數據的SQL語句 sql = "SELECT id,name,age from USER1;" # 執行SQL語句 cursor.execute(sql) # 這個獲得一個數據總數 # 獲取多條查詢數據 ret = cursor.fetchall() # 拿到全部的數據 cursor.close() conn.close() # 打印下查詢結果 print(ret)
進階用法:
# 能夠獲取指定數量的數據 cursor.fetctmany(3) # 從光標開始處,拿到3條數據, 拿到數據後,光標向下移動3行 # 光標按絕對位置移動1 絕對定位:從0開始移動光標 cursor.scroll(1, mode="absolute") 只能是: 正數 # 光標按照相對位置(當前位置)移動1 相對定位:相對於當前光標位置 (默認) cursor.scroll(1, mode="relative") 正數:向下 負數:向上
示例:
import pymysql inputName = input('name:') inputPwd = input('pwd:') conn = pymysql.connect(host="localhost", database="db1", user="root", password="123456", charset="utf8") cursor = conn.cursor() # 獲得一個能夠執行SQL語句的光標對象 sql = "select * from userinfo;" cursor.execute(sql) ret1 = cursor.fetchmany(3) # 取2個,光標位置準備取第3條數據 cursor.scroll(1,mode='absolute') ret2 = cursor.fetchone() # 光標絕對移動,從0開始移動,因此取第2條數據 cursor.close() # 關閉光標 conn.close() # 關閉數據庫鏈接 print(ret1) # ((1, 'zhou', '123456'), (2, 'long', '123456')), (3, 'zhi', '123456')) print(ret2) # (2, 'long', '123456')