数据库可视化工具简介以及pymysql的使用
生活随笔
收集整理的這篇文章主要介紹了
数据库可视化工具简介以及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的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 发明闪存能赚多少钱?这是一个日本的狗血故
- 下一篇: 日志收集以及分析:Splunk