python筆記7:mysql、redis操作

来源:http://www.cnblogs.com/lhly/archive/2017/06/27/7082206.html
-Advertisement-
Play Games

模塊安裝: 數據操作用到的模塊pymysql,需要通過pip install pymysql進行安裝。 redis操作用的模塊是redis,需要通過pip install redis進行安裝。 檢驗是否安裝成功:進入到Python命令行模式,輸入import pymysql、 import redi ...


模塊安裝:

數據操作用到的模塊pymysql,需要通過pip install pymysql進行安裝。

redis操作用的模塊是redis,需要通過pip install redis進行安裝。

 檢驗是否安裝成功:進入到Python命令行模式,輸入import pymysql、 import redis ,無報錯代表成功;

mysql操作方法如下:

 查詢數據:fetchone、fetchmany(n)、fetchall()
import pymysql
#建立mysql連接,ip、埠、用戶名、密碼(passwd,不能寫成其他,例如:pwd或者p,否則報錯)、庫名
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='123456', db='szz', port=3306, charset='utf8')
#創建游標
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)  #指定cursor的類型為字典,返回結果類型是字典,不再是元組
#執行sql,返回值是int,查詢出來的結果有幾條
cur.execute('select * from test')
#獲取第一條數據,游標cur所在的位置為1,游標從0開始,查詢結果類型為:字典
row_1 = cur.fetchone()
cur.scroll(0, mode='absolute')   #將游標移動到初始位置
#獲取前n行數據
row_2 = cur.fetchmany(n)
cur.scroll(0, mode='absolute')   #將游標移動到初始位置
#獲取所有數據,返回結果類型是:list,裡面元素是字典
row_3 = cur.fetchall()
cur.scroll(0, mode='absolute')   #將游標移動到初始位置
print(row_2)
#關閉游標
cur.close()
#關閉連接
conn.close()

增加、更新、刪除數據:

import pymysql
#建立mysql連接
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='123456', db='szz', port=3306, charset='utf8')
#創建游標
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)  #指定cursor的類型為字典,返回結果類型是字典,不再是元組
#執行sql
sql = 'insert into test values(5, "斷點", "e10adc3949ba59abbe56e057f20f883e")'
sql_update = 'update test set name="薛之謙" where id=2 '
sql_del = 'delete from test where id = 3'
cur.execute(sql_del)
#insert、update、delete語句需要進行commit,否則無法保證修改或者新建的數據
conn.commit()
#關閉游標
cur.close()
#關閉連接
conn.close()

cursor的相對、絕對位置移動

import pymysql
#建立mysql連接
conn = pymysql.connect(host='192.168.3.66', user='root', passwd='123456', db='szz', port=3306, charset='utf8')
#創建游標
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)  #指定cursor的類型為字典,返回結果類型是字典,不再是元組
num = cur.execute('select * from testlhl')
print(num)                                           #返回結果是int類型

row_1 = cur.fetchone()             # 此時游標的位置在1,資料庫取值從0下標開始,獲取資料庫第一條數據
cur.scroll(2, mode='absolute')     #absolute絕對位置,直接是將游標從0位置移動到指定的位置2
row_2 = cur.fetchone()             #讀取資料庫第3條數據,游標在3位置
cur.scroll(2, mode='relative')     #relative相對位置,相對於游標當前所在位置,進行移動,移動1位,游標在4位置,若相對移動的位置超過下標,則報out of range
row_3 = cur.fetchone()             #讀取第5條數據
#關閉游標
cur.close()
#關閉連接
conn.close()

 mysql的增刪改查公共方法,代碼如下:

 1 def getconn(host, user, passwd, db, sql, port=3306,charset='utf8'):
 2     conn = pymysql.connect(host=host, user=user, passwd=passwd, port=port, db=db, charset=charset)  #建立連接
 3     cur = conn.cursor(cursor=pymysql.cursors.DictCursor)        #建立游標並指定游標類型
 4     cur.execute(sql)                                            #執行sql
 5     if sql.startswith('select'):                                #判斷sql是否是select
 6         res = cur.fetchone()
 7     else:
 8         conn.commit()                                           #insert\delete\update語句執行完畢後需要進行commit
9 res = 88 10 cur.close() #關閉游標 11 conn.close() #關閉連接 12 return res

 

redis操作方法如下:

key的類型是string,進行set操作,模式{key, value},如下:

import redis
db = 0
#連接redis,password不簡寫(否則或報錯),db若不寫,則預設操作db0
conn_redis = redis.Redis(host='127.0.0.1', port=6379, password='123456', db=db)
#給redis添加值,傳值方式是key-value,key不可重覆,value的形式儘量是string,也可以傳list、字典,redis記憶體放的是位元組res = conn_redis.set('name', 'testredis')
#print(res)    #返回值是布爾類型,set成功,則返回true
conn_redis.set('days', '[10,4,5,12,44]')

#set key值到redis內,且可以設置過期時間,10s result = conn_redis.setex('session', 'abcder1233@sdfrr', 10) #單位是s print(result) #返回值是布爾類型,set成功,則返回true
#批量插入redis,可以寫入多個key-valye
conn_redis.mset(a='xiaohei', b='xiaobai', c='xiaohuang')
#設置key時,可以設置文件夾,user文件夾,key:test,value:haha
conn_redis.set('user:test','haha')

獲取redis內的數據,通過key值進行獲取:

 1 import redis
 2 import json
 3 db = 0
 4 #連接redis,password不簡寫(否則或報錯),db若不寫,則預設操作db0
 5 conn_redis = redis.Redis(host='127.0.0.1', port=6379, password='123456', db=db)
 6 #獲取redis的值,返回結果類型是bytes
 7 res = conn_redis.get('abcd')
 8 #使用decode()將bytes類型轉換為字元串:輸出>>>>>testredis
 9 new_res = res.decode()
10 #使用json的loads,將json串(字元串)轉換為字典
11 dic_res = json.loads(new_res)
12 
13 #獲取不存在的key,返回結果為None
14 res1 = conn_redis.get('asdfg')
15 print(res1.decode())       #輸出>>>>>>'NoneType' object has no attribute 'decode'
16 
17 #獲取所有的keys,且迴圈遍歷進行輸入,使用decode()轉換為字元串
18 list_keys = conn_redis.keys()
19 for key in list_keys:
20     print(key.decode())
21 
22 #獲取所有的key中以n開頭的key,返回結果類型是list,元素類型是bytes  輸出>>>>>[b'nbeee', b'name', b'nest']
23 print(conn_redis.keys('n*'))

刪除redis內的值,通過key刪除:

import redis
db = 0
#連接redis,password不簡寫(否則或報錯),db若不寫,則預設操作db0
conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)
#刪除存在的key,刪除key後,redis內不存在該key,返回結果為1,刪除了一個key
res = conn_redis.delete('a')
#刪除不存在的key,返回結果為0,沒有刪除key
res1 = conn_redis.delete('d')
#刪除多個key,返回結果n, 刪除了幾個key就返回數字幾
asdf = conn_redis.delete('a', 'b', 'c')
print(asdf)

key的類型是hash,進行set操作,模式:{key,{key1,value}}如下:

import redis
db = 0
#連接redis,password不簡寫(否則或報錯),db若不寫,則預設操作db0
conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)
#hash類型的key,模式{name,{key,value}},裡面key不能重覆,返回值為int
res = conn_redis.hset('user_session', 'lhl', 'sunny')
#hash類型的key,添加值時也可以設置文件夾
conn_redis.hset('session:redis_test', 'age', 18) 

key的類型是hash,進行get操作,如下:

import redis
db = 0
#連接redis,password不簡寫(否則或報錯),db若不寫,則預設操作db0
conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)
#獲取hash類型中的某個name下的某個key對應的value ,獲取指定name裡面的key的值,返回結果類似是bytes
res = conn_redis.hget('user_session', 'week')
#獲取hash類型中name裡面所有的key,返回結果是字典>>>>>輸出:{b'test': b'sunny', b'week': b'sunny'}
all = conn_redis.hgetall('user_session')

key的類型是hash,進行delete操作,如下:

import redis
db = 0
#連接redis,password不簡寫(否則或報錯),db若不寫,則預設操作db0
conn_redis = redis.Redis(host='192.168.3.66', port=6379, password='123456', db=db)
#hash類型的key,刪除整個key, delete(name),返回結果為1
res = conn_redis.delete('user_session')
#hash類型的key,刪除指定name里的key,若刪除的key或者name不存在,則返回0
res = conn_redis.hdel('user_session', 'week')

redis的set、get公共操作方法如下:

1 def opRedis(host, password, key, value=None, port=6379,db=0):      #redis操作時需要傳入key\value
2     conn_redis = redis.Redis(host=host, password=password, port=port, db=db)   #獲取redis連接
3     if value:                           #判斷value是否傳值,如果不為None,則是set
4         conn_redis.setex(key, value, 60)   #設置key的過期時間,60s
5         res = 88
6     else:
7         res = conn_redis.get(key).decode()     #將從redis內讀取的值,由bytes轉換為字元串
8     return res

有寫的不對的,或者不明白的,歡迎留言~~~~

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • #include <bits/stdc++.h>using namespace std;int main(){ string s; int i=1,n,z; cin>>s; z=s[0]-48;n=s.length(); while(i<n) { if(s[i]=='+') z=z+(s[i+1]- ...
  • 在servlet中,轉發和重定向是由request和response完成的。兩者之間的區別請看我之前的文章。那麼在springMVC中是如何完成的呢? /**轉發**/ @RequestMapping("/login.do") public String login(HttpServletReque ...
  • 真是前所未有的大失誤啊,竟然快兩個月忘記寫博客了! 公司的項目組連著解散了倆,挺動蕩的! 終於把欠公司的錢還上了,這次改欠支付寶了! 摩托車也練的可以正常騎行了,拉過幾次高速,最快到111了,油門還沒到底,不知道磨合期過了之後是不是能更快一些! 房貸也開始還了,現在每個月都是收支都是負數,情況不太樂 ...
  • python中的多線程其實並不是真正的多線程,如果想要充分地使用多核CPU的資源,在python中大部分情況需要使用多進程。Python提供了非常好用的多進程包multiprocessing,只需要定義一個函數,Python會完成其他所有事情。藉助這個包,可以輕鬆完成從單進程到併發執行的轉換。mul ...
  • 轉載需註明原文地址和作者兩項內容。 正則表達式目的是能夠快速處理字元串內容,主要用於找出指定的字元串,配合其他操作完成任務。使用正則表達式時要瞭解自己語言的特性,python中的正則表達式預設情況是貪婪模式,也就是不限制的情況下會儘可能多得匹配字元串。 0x00 基礎語法 0x01 python正則 ...
  • 廢話不說,直接給思路 gitlab重部署後新加用戶不發送激活郵件,配置如下: 首先確認配置沒問題,其次查看日誌production.log log沒有給出錯誤信息。那就直接開大招 確保method為smtp,錯了就是配置寫錯了或者沒被正確載入 確保配置是我們要的 發送測試郵件,此時會列印詳細錯誤 T ...
  • 1、把lib.py里的代碼導入index.py,然後使用lib.py代碼: 導入之後會生成一個.pyc文件,即位元組碼文件。 2、解釋器 即用python來執行hello.py腳本. 3、編碼的基本知識 unicode即萬國碼,utf8是對unicode的精簡,gbk是與utf8同級別的編碼方式。 4 ...
  • 一、線程創建 註解:Thread(group=None,target=None,name=None,args=(),kwargs={})group:線程組,目前還沒有實現,庫引用時提示必須是Nonetarget:要執行的方法name:線程名args/kwargs:要傳入方法的參數,args和kwar ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...