pymysql

關於pymysql

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('登陸失敗')
View Code

運行: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';
    登陸成功
View Code

正確的連接數據庫姿式: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')
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息