python連接mysql、mongodb、redis

python連接mysql

安裝pymysql

導包:

import pymysql

建立數據庫的連接
參數:主機名、用戶名、密碼、數據庫名

conn = pymysql.connect('localhost','root','root','database')

獲取遊標

cursor = conn.cursor()

所有的增刪改查都寫在sql中
編寫sql語句

sql = ' '

#動態查詢
sql = 'select * form stu where id = %d'%(d)

#sql語句過多是比如建表,嵌套查詢可以用如下寫法
sql = """
   #sql語句可回車
"""

執行sql語句

cursor.execute(sql)

開啓事物

db.begin()
try:
    cursor.execute(sql)
    db.commit()#修改需要提交,查詢不需要提交
    print("cg")
except Exception as e:#pymysql.Error=>Exception
    print(e)

    #回滾
    db.rollback()

獲取單條數據

res = cursor.fetchone()

獲取所有的結果

res = cursor.fetchall()

獲取影響行數

num = cursor.rowcount()

關閉遊標和數據庫

cursor.close()
conn.close()

python連接mongoDB

安裝 pip install pymongo

導包

import pymongo

建立連接

connet = pymongo.MongoClient('localhost',27017)  #指定地址端口
connet = pymongo.MongoClient() #默認地址端口
connet = pymongo.MongoClient('mongodb://127.0.0.1:27017/')#url形式

獲取所有的數據庫名

all_database=connet.list_database_names()

獲取數據庫

database = connet.school
#字典方式獲取,防止與系統變量重複
 database = connet['school']

#獲取集合又稱爲表
table = database.student
 table = database['student']

下面兩種插入方式都python3.6和3.7都可以用,只是有警告

#添加文檔(插入)python3.6:
table.insert({"name":"abc", "age":19})
table.insert([{"name":"abc1", "age":19},{"name":"abc2", "age":19}])

#python3.7後建議使用如下方式
#插入單條,可以後加inserted_id返回id,不加返回一個InsertOneResult的實例
res = table.insert_one({"name":"ll","age":25}).inserted_id
#插入多條
res = table.insert_many([{"name":"dasf","age":30},{"name":"fsaf","age":45}])
dict = [{"name":"tuyh","age":87},{"name":"oikujh","age":65}]
res= table.insert_many(dict)

查看文檔

res=table.find() #fine可以指定查詢條件

#遍歷
for row in res:
    print(row)
    name = row.get('name',(None|'no key'))#get()存在返回內容,不存在返回None或設置後的no key,直接用不存在會報錯
    print(name)

統計查詢

res = table.find({"age":{"$gt":20}}).count()

排序

res = table.find().sort("age")#升序
res = table.find().sort("age", pymongo.DESCENDING)#降序

分頁查詢

res = table.find().skip(3).limit(5)

更新文檔

#upset未找到是否插入,multi是否改變多條
collection.update({"name":"lilei"},{"$set":{"age":25}},upsert=False,multi=False)
#python3.7 後仍然建議使用updata_one或者updata_many修改一條或者多條

#upset未找到是否插入
res = table.update_one({"dasf":'okk'},{'$set':{'name':'666','age':166}},upsert=False)
res = table.update_many({"dasf":'okk'},{'$set':{'name':'666','age':166}},upsert=False)

刪除文檔

#multi默認刪除多條
res = table.remove({'name':'fsaf'},multi=False)
#python3.7 後
res = table.delete_one({'name':'fsaf'})
res = table.delete_many({'name':'fsaf'})

python連接redis

導入

import redis

默認連接到本機,端口是6379 數據庫是0

r = redis.Redis()
#也可以指定
r = redis.Redis(host="localhost", port=6379,db=1)

設置key name=okk 100秒過期

r.set('name','okk',ex=100)

獲取value

name = r.get('name')
print(name.decode()) #換編碼 不加輸出 b'okk'  加了輸出 okk

list使用

r.lpush('mylist1',1,9,34,78)

把數組插入進去

ll = [1,8,0,9]
#把數組對象序列化,把對象變成字符串
import json
ll_str = json.dumps(ll)
print(ll_str,type(ll_str))   #[1, 8, 0, 9] <class 'str'>
r.set('myll',ll_str)
myll=r.get('myll').decode()

#反序列化,把字符變爲list
myll_obj = json.loads(myll)
print(myll_obj,type(myll_obj))   #[1, 8, 0, 9] <class 'list'>

使用管道一次性插入

pipe = r.pipeline()
pipe.set('age',18)
pipe.set('class','ssdaf')

#執行管道里面所以命令
pipe.execute()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章