什么是pymysql模塊
PyMySQL 是在 Python3.x 版本中用於連接 MySQL 服務器的一個庫,Python2中則使用mysqldb。
使用pymysql模塊
下載第三方模塊: pip3 install pymysql
import pymysql
# 1.連接並打開Mysql數據庫
conn = pymysql.connect(
host='127.0.0.1', #主機地址,若是自己的主機也可以用'localhost'
port=3306, #端口
user='root', #用戶
password='123456', #密碼
database='db4', #數據庫
charset='utf8', # 設置編碼,此處不能寫utf-8
autocommit=True # 自動提交
)
# 2.創建游標,獲取游標對象 ----> 游標 可以用來提交sql命令
#pymysql.cursors.DictCursor 將查詢出來的結果制作成字典的形式返回
cursor_obj = conn.cursor(pymysql.cursors.DictCursor)
# 3.通過execute()方法可以執行sql語句
# 查數據
cursor_obj.execute('select * from t1')
# 查到數據后通過cursor_obj對象.fetchall() 獲取所以查詢到的結果
one = cursor_obj.fetchone() #獲取結果的第一條數據 fetchone()
print(one)
for i in cursor_obj.fetchmany(3): #獲取剩余結果的前n條數據 #fetchmany()
print(i)
all = cursor_obj.fetchall() # 獲取剩余結果的所有數據
for j in all :
print(j)
#相對移動
cursor_obj.scroll(2,
'relative') #基於指針所在的位置向后偏移2個
#絕對移動
cursor_obj.scroll(2,
'absolute') #基於起始位置向后偏移2個
# 一、創建表
#若表存在則刪除
cursor_obj.execute('drop table if exists user')
#創建表
sql = 'create table t1(id int,auto_increment,name varchar(20))'
# 5.使用 execute() 方法執行創建數據庫語句
cursor_obj.execute(sql)
# 二、SQL 插入語句
try:
sql = 'insert into user(id, name) values(1, "baohan")'
#執行 sql 語句
cursor_obj.execute(sql)
#提交到數據庫執行,不然無法保存新建或者修改的數據
cursor_obj.commit()
except Exception as e:
print(e)
# 三、更新數據
try:
sql = 'update user set name="baohan_666" where id=1'
cursor_obj.execute(sql)
except:
# 如果發生錯誤則回滾
conn.rollback()
#對數據進行查找
print(cursor_obj.execute('select * from user'))
print(cursor_obj.fetchall())
# 四、刪除數據
sql = 'delete from user'
cursor_obj.execute(sql)
# 提交,不然無法保存新建或者修改的數據
conn.commit()
# 關閉游標
cursor_obj.close()
# 關閉連接
conn.close()
SQL的注入問題
sql注入問題:利用特殊符號和注釋語法 巧妙地繞過真正的sql校驗
關鍵性的數據 不要自己手動去拼接 而是交由execute幫你去做拼接
import pymysql
conn = pymysql.connect(
host = 'localhost',
user = 'root',
passwd = '123',
charset = 'utf8',
db = 'day36',
autocommit = True
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
#獲取用戶輸入的用戶名和密碼 然后去數據庫中校驗
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# sql = "select * from user_info where name='%s' and password= '%s'"%(username,password) #錯誤寫法,會產生SQL注入問題
sql = "select * from user_info where username=%s and password=%s"
cursor.execute(sql,(username,password))
res = cursor.fetchall()
if res:
print(res)
else:
print('用戶名或密碼錯誤')
