日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

数据库可视化工具简介以及pymysql的使用

發布時間:2023/12/13 综合教程 42 生活家
生活随笔 收集整理的這篇文章主要介紹了 数据库可视化工具简介以及pymysql的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.可視化工具Navicat

  我們自己開發測試時,可以使用該可視化工具,以圖形界面的形式操作數據庫

  在生產環境中,為了顯示自己的逼格,一般不建議使用它

官網下載:https://www.navicat.com/en/products/navicat-for-mysql

網盤下載:https://pan.baidu.com/s/1bpo5mqj

2.pymysql的使用

2.1模塊的下載(終端)

pip install pymysql

2.2鏈接,執行sql以及關閉游標

  這是我在test庫下創建的ttt表格

import pymysql

user = input('username:').strip()
pwd = input('password:').strip()

# 鏈接
conn = pymysql.connect(host='localhost',port=3306,user='root',password='',database='test',charset='utf8')

# 創建游標對象
cursor = conn.cursor()

# 執行mysql語句
sql='select * from ttt where name="%s" and password="%s"' %(user,pwd)
print(sql)

# 執行sql語句,返回sql查詢成功的記錄數目,輸入錯誤則是0,正確輸出1
result = cursor.execute(sql)
print(result)

cursor.close()
conn.close()

類似結果

2.3execute()之sql注入

看看下面兩種輸入方式(注意輸入的是單引號還是雙引號,另--后面還有空格,否則輸出是0)

  在用戶名輸入正確的情況下繞過密碼(bob"-- 任意字符)

  直接繞過用戶名和密碼訪問(xxx' or 1=1 -- 任意字符)

造成上面結果的原理:

  就根據程序的字符串拼接name='%s',我們輸入一個xxx"-- haha,用我們輸入的xxx加'在程序中拼接成一個判斷條件name='xxx' -- haha'

解決辦法:

  核心就是不使用字符串拼接方方式去訪問就ok,下面是修改的代碼

import pymysql

user = input('username:').strip()
pwd = input('password:').strip()

# 鏈接
conn = pymysql.connect(host='localhost',port=3306,user='root',password='',database='test',charset='utf8')

# 創建游標對象
cursor = conn.cursor()

# 執行mysql語句,這里兩個%不需要加上引號,mysql會默認給加上,另外pymysql模塊自動幫我們
# 將uer和pwd注入,所以下面括號內的內容必不可少(也可以是列表),它其實間接的和字符串拼接是一個道理
sql = "select * from ttt where name=%s and password=%s"
print(sql)     # 這步沒啥意義,就是讓你看看結果
res = cursor.execute(sql,(user,pwd))
print(res)

cursor.close()
conn.close()

結果

2.4增、刪、改:conn.commit()

  這里一定要有execute執行和commit提交這幾步

import pymysql

# 鏈接
conn = pymysql.connect(host='localhost',port=3306,user='root',password='',database='test',charset='utf8')

# 創建游標對象
cursor = conn.cursor()

# 增一個
sql = "insert into ttt(name,password) values(%s,%s);"
res = cursor.execute(sql,('luffy',666))


# 增多個
sql = "insert into ttt(name,password) values(%s,%s);"
res = cursor.executemany(sql,[('qq',454),('ww',574),('ee',322)])   # 必須放進一個大的列表里

# 改操作
sql = "update ttt set name = %s  where id = 4;"
cursor.execute(sql,'zoro')

# 刪操作
sql = "delete from ttt where id=2;"
cursor.execute(sql)   # 刪除了這步執行語句也得要有


conn.commit()   # 提交語句,必須要有,別忘啊
cursor.close()
conn.close()

2.5查fetchone,fetchmany,fetchall(屬于光標操作)

fetchone():獲取下一行數據,第一次為首行;
fetchall():獲取所有行數據源
fetchmany(4):獲取4行數據

上面的表經過增刪改后:

fetchone()與fetchall()

import pymysql

# 鏈接
conn = pymysql.connect(host='localhost',port=3306,user='root',password='',database='test',charset='utf8')

# 創建游標對象
cursor = conn.cursor()  # 默認返回元祖形式
# cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)   # 它返回的是一個字典

# 查操作,返回sql影響成功的行數rows,將結果放入一個集合,等待被查詢
sql = "select * from ttt;"
rows = cursor.execute(sql)

# 查詢單個
res1=cursor.fetchone()   # 查找出id是1的
res2=cursor.fetchone()   # 查找出id是3的
print(res1)
print(res2)

# 對rows進行操作,查找所有,注意這里的所有指的是id是3以后的了,光標已經移動了
rows = cursor.fetchall()
print(rows)

conn.commit()   # 提交語句,必須要有,別忘啊
cursor.close()
conn.close()

注意,當使用fetchone獲取數據時,如果光標已經到最后一行,則會返回none,我們可以采用下面方式移動指針

cursor.scroll(1,mode='relative')  # 相對當前位置移動
cursor.scroll(2,mode='absolute') # 相對絕對位置移動
第一個值為移動的行數,整數為向下移動,負數為向上移動,mode指定了是相對當前位置移動,還是相對于首行移動

總結

以上是生活随笔為你收集整理的数据库可视化工具简介以及pymysql的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。