PyMySQL安裝
pip install pymysql
鏈接數據庫
在進行本文如下內容以前須要注意:python
- 你有一個MySQL數據庫,而且已經啓動。
- 你有能夠鏈接該數據庫的用戶名和密碼
- 你有一個有權限操做的database
基本使用
# 導入pymysql模塊 import pymysql # 鏈接database conn = pymysql.connect(host=「你的數據庫地址」, user=「用戶名」,password=「密碼」,database=「數據庫名」,charset=「utf8」) # 獲得一個能夠執行SQL語句的光標對象 cursor = conn.cursor() # 定義要執行的SQL語句 sql = """ CREATE TABLE USER1 ( id INT auto_increment PRIMARY KEY , name CHAR(10) NOT NULL UNIQUE, age TINYINT NOT NULL )ENGINE=innodb DEFAULT CHARSET=utf8; """ # 執行SQL語句 cursor.execute(sql) # 關閉光標對象 cursor.close() # 關閉數據庫鏈接 conn.close()
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
# 導入pymysql模塊 import pymysql # 鏈接database conn = pymysql.connect(host=「你的數據庫地址」, user=「用戶名」,password=「密碼」,database=「數據庫名」,charset=「utf8」) # 獲得一個能夠執行SQL語句而且將結果做爲字典返回的遊標 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 定義要執行的SQL語句 sql = """ CREATE TABLE USER1 ( id INT auto_increment PRIMARY KEY , name CHAR(10) NOT NULL UNIQUE, age TINYINT NOT NULL )ENGINE=innodb DEFAULT CHARSET=utf8; """ # 執行SQL語句 cursor.execute(sql) # 關閉光標對象 cursor.close() # 關閉數據庫鏈接 conn.close()
注意:mysql
charset=「utf8」,編碼不要寫成"utf-8"sql
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
""" 獲取用戶輸入,登陸 """ import pymysql # 1. 獲取用戶輸入 name = input('請輸入用戶名:') pwd = input('請輸入密碼:') # 判斷用戶名和密碼是否正確 # 去數據庫查詢一下 用戶輸入的用戶名和密碼是否正確 # 在Python程序中要鏈接數據庫執行SQL語句 --> pymysql模塊 # 1. 鏈接數據庫,獲得一個鏈接 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='day43', charset='utf8' ) # 2. 獲取光標 cursor = conn.cursor() # 3. 執行SQL語句 # 3.1 獲得SQL語句 sql = "select * from userinfo where username='%s' and password='%s';" % (name, pwd) print(sql) # 3.2 使用光標對象執行SQL語句 ret = cursor.execute(sql) # 關閉 cursor.close() conn.close() # 4 獲得結果 if ret: print('登錄成功') else: print('登陸失敗')
SQL注入問題
1. 什麼是SQL注入? 用戶輸入的內容有惡意的SQL語句,後端拿到用戶輸入的內容不作檢測直接作字符串拼接,獲得一個和預期不一致的SQL語句 2. 如何解決SQL注入? 對用戶輸入的內容作檢測 pymysql內置了這種檢測,咱們只須要讓pymysql幫咱們拼接sql語句 ret = cursor.execute(sql, [name, pwd]) # 讓pymysql模塊幫咱們拼接sql語句,執行SQL語句
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
''' 獲取用戶輸入,登陸 ''' import pymysql name = input('請輸入用戶名:') pwd = input('請輸入密碼:') # 1.鏈接數據庫,獲得一個鏈接 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='day43', charset='utf8' ) # 2.獲取光標 cursor = conn.cursor() # 3.執行sql語句 # 3.1 獲得sql語句 sql = "select * from userinfo where username=%s and password=%s;" # 按照pymysql模塊的寫法定義好佔位符 print(sql) # 3.2使用光標對象執行sql語句 # ret = cursor.execute(sql) ret = cursor.execute(sql, [name, pwd]) # 讓pymsql模塊幫咱們拼接sql語句,執行sql語句 # 關閉 cursor.close() conn.close() # 4.獲得結果 print(ret) if ret: print('登陸成功') else: print('登陸失敗') # with open('userinfo', ) as f: # for line in f: # u,p = line.strip().split() # if u
增
""" 向userinfo表插入一條數據 """ import pymysql # 1. 鏈接數據庫,獲得一個鏈接 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='day43', charset='utf8' ) # 2. 獲取光標 cursor = conn.cursor() # 3. 執行SQL語句 # 3.1 獲得SQL語句 sql = "insert into userinfo(username, password) values (%s,%s);" # 按照pymysql模塊的寫法定義好佔位符 # 3.2 使用光標對象執行SQL語句 ret = cursor.execute(sql, ['Eva_J', '456']) # 讓pymysql模塊幫咱們拼接sql語句,執行SQL語句 # 涉及操做數據庫的 必定要提交 conn.commit() # 關閉 cursor.close() conn.close()
插入數據失敗回滾數據庫
在執行增刪改操做時,若是不想提交前面的操做,可使用 rollback() 回滾取消操做。後端
# 導入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 = "Alex" age = 18 try: # 執行SQL語句 cursor.execute(sql, [username, age]) # 提交事務 conn.commit() except Exception as e: # 有異常,回滾事務 conn.rollback() cursor.close() conn.close()
獲取插入數據的ID(關聯操做時會用到)ide
# 導入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 = "Alex" 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()
批量執行fetch
# 導入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 = [("Alex", 18), ("Egon", 20), ("Yuan", 21)] try: # 批量執行多條插入SQL語句 cursor.executemany(sql, data) # 提交事務 conn.commit() except Exception as e: # 有異常,回滾事務 conn.rollback() cursor.close() conn.close()
刪
""" 從userinfo表把alex刪掉 """ import pymysql # 1. 鏈接數據庫,獲得一個鏈接 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='day43', charset='utf8' ) # 2. 獲取光標 cursor = conn.cursor() # 3. 執行SQL語句 # 3.1 獲得SQL語句 sql = "delete from userinfo where username=%s;" # 按照pymysql模塊的寫法定義好佔位符 # 3.2 使用光標對象執行SQL語句 ret = cursor.execute(sql, ['alex']) # 讓pymysql模塊幫咱們拼接sql語句,執行SQL語句 # 涉及操做數據庫的 必定要提交 conn.commit() # 關閉 cursor.close() conn.close()
改
""" 從userinfo表把金老闆的密碼改爲789 """ import pymysql # 1. 鏈接數據庫,獲得一個鏈接 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='day43', charset='utf8' ) # 2. 獲取光標 cursor = conn.cursor() # 3. 執行SQL語句 # 3.1 獲得SQL語句 sql = "update userinfo set password=%s where username=%s;" # 按照pymysql模塊的寫法定義好佔位符 # 3.2 使用光標對象執行SQL語句 ret = cursor.execute(sql, ['789', 'gold']) # 讓pymysql模塊幫咱們拼接sql語句,執行SQL語句 # 涉及操做數據庫的 必定要提交 conn.commit() # 關閉 cursor.close() conn.close()
查
""" 從userinfo表查詢全部數據 """ import pymysql # 1. 鏈接數據庫,獲得一個鏈接 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='day43', charset='utf8' ) # 2. 獲取光標 cursor = conn.cursor() # 3. 執行SQL語句 # 3.1 獲得SQL語句 sql = "select * from userinfo;" # 按照pymysql模塊的寫法定義好佔位符 # 3.2 使用光標對象執行SQL語句 cursor.execute(sql) # 讓pymysql模塊幫咱們拼接sql語句,執行SQL語句 ret = cursor.fetchall() print(ret) # 關閉 cursor.close() conn.close()
查(字典類型)
""" 從userinfo表查詢全部數據 """ import pymysql # 1. 鏈接數據庫,獲得一個鏈接 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='day43', charset='utf8' ) # 2. 獲取光標 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 3. 執行SQL語句 # 3.1 獲得SQL語句 sql = "select * from userinfo;" # 按照pymysql模塊的寫法定義好佔位符 # 3.2 使用光標對象執行SQL語句 cursor.execute(sql) # 讓pymysql模塊幫咱們拼接sql語句,執行SQL語句 # 查詢全部 # ret = cursor.fetchall() # 查詢單條記錄 # ret = cursor.fetchone() # print(ret) # ret = cursor.fetchone() # print(ret) # ret = cursor.fetchone() # print(ret) # 查詢指定數量的數據 ret = cursor.fetchmany(3) print(ret) print(cursor.fetchone()) print(cursor.fetchone()) # cursor.scroll(0, mode='absolute') # 絕對位置,你讓光標移動到哪裏 # cursor.scroll(-1, mode='relative') # 相對位置,基於光標當前位置移動 print(cursor.fetchone()) # 關閉 cursor.close() conn.close()
進階用法
# 能夠獲取指定數量的數據 cursor.fetchmany(3) # 光標按絕對位置移動1 cursor.scroll(1, mode="absolute") # 光標按照相對位置(當前位置)移動1 cursor.scroll(1, mode="relative")