python操做數據庫(MySQL,Redis,Mongdb)

1、python操做MySQLpython

安裝pymysql插件,cmd輸入pip install pymysql便可安裝成功mysql

操做數據庫基本方式:正則表達式

一、鏈接數據庫redis

二、執行操做語句(增,刪,改,查)sql

三、關閉數據庫mongodb

import pymysql
#鏈接數據庫,ip,端口號,用戶名,密碼,數據庫,charset='utf8'設置編碼方式,autocommit=True是否自動提交數據庫執行
conn = pymysql.connect(host='118.24.xx.xx',user='jxz',password='123456',
                       port=3306,db='jxz',charset='utf8',autocommit=True)
cur = conn.cursor()#創建遊標(至關於倉庫的管理員)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)#建立遊標,指定遊標類型爲字典,則fetch抓到的數據爲字典類型
sql = "insert into lina (name,age,status) values (%s,%s,%s)"
args = (['lina10',18,0],['lina11',14,1],['lina10',28,0])
cursor.executemany(sql, args)  # 插入多條數據
cur.execute("insert into nhy (name,pwd) values ('lixiaona','123456')")
# conn.commit()#提交到數據庫執行,鏈接時加了autocommit就不須要手動提交了
cur.execute('select * from nhy;')#執行sql語句,不會返回數據
print(cur.fetchall())#獲取查詢到的全部結果,保存在二維元祖裏面
# 下面就獲取不到了,遊標和文件指針差很少,
print(cur.fetchone())#獲取一條數據
print(cur.fetchmany(2))#獲取n條數據
cur.close()#關閉遊標xx
conn.close()#關閉數據庫鏈接

 

小練習:定義函數,操做MySQL,有返回值的將結果返回數據庫

import pymysql
def my_db(ip,user,password,db,sql,port=3306,charset='utf8'):
    conn = pymysql.connect(host=ip,user=user,password=password,
                    db=db,port=port,charset=charset,autocommit=True)
    cur = conn.cursor()
    cur.execute(sql)
    sql = sql.strip()
    sql = sql[:6].lower()#取到執行語句的前6個字符,用來判斷是select、show查詢 仍是其餘增刪改(insert,delete,update)
    if sql.startswith('select') or sql.startswith('show'):
        data = cur.fetchall()#將查詢的結果保存在data裏

    else:
        data = 'ok'
    cur.close()
    conn.close()
    return data

2、python操做Redisoracle

 

傳統的關係型數據庫
  mysql,oracle,sql,db2
  數據存在磁盤上
  表與表之間有關係
  使用sql操做數據
非關係型數據庫
  解決性能問題
  mongodb數據存在磁盤上
  redis 數據存在內存裏,常常用的數據存在redis裏面
  沒有語句,沒有表結構
  key,value等形式函數

import redis
#鏈接redis
conn = redis.Redis(host='118.24.3.40',port=6379,password='HK139bc&*',db=9)
############操做String類型的#########
#增,修改
conn.set('lina_info1','{age:18,sex:female}',10)#最後一個是key失效時間,50s會失效,不填則默認爲-1爲永久生效
#
res = conn.get('lina_info')#返回數據帶b,表明byte,二進制,獲取不到則返回none
print(res)
print(res.decode())#二進制轉爲字符串
#刪除
conn.delete('lina_info1')
res = conn.keys()#獲取全部的key
res = conn.keys('*info')#過濾,結尾爲info的,模糊匹配
print(conn.exists('lina_info'))#判斷是否存在key
conn.flushdb()#清空數據庫全部的key
###########操做哈希類型的##############
#哈希理解爲字典嵌套字典
conn.hset('lina_crm','lina1','qwert1')#大key爲lina_crm,小key爲lina1 value爲qwert1
conn.hset('lina_crm','lina2','qwert2')
conn.hset('lina_crm','lina3','qwert3')
conn.hsetnx('hname1','test_key2','test_value_2')#設置哈希類型的值,與上面不一樣的是不存在的才能設置(意思就是不能修改value值)
conn.hmset('hname2',{'lina2':'vlina2','lina3':'vlina3'})#批量添加
conn.expire('lina_crm',20)#設置key的失效時間
print(conn.ttl('lina_crm'))#查看失效剩餘時間
print(conn.type('lina_crm'))#查看類型,哈希類型
conn.hdel('lina_crm','lina1')#刪除指定的小key
conn.delete('lina_crm')#刪除整個key
print(conn.hget('lina_crm','lina1'))#獲取小key
res = conn.hgetall('lina_crm')#獲取到哈希類型全部的數據
print(res)
#將哈希類型轉爲字符串
res = conn.hgetall('lina_crm')#獲取到哈希類型全部的數據
# print(res)
# 方法一:
new = {}
for k in res:
    new[k.decode()]=res.get(k).decode()
# 方法二:
for k,v in res.items():
    new[k.decode()] = v.decode()
# 方法三:無需引入新的字典
for k ,v in res.items():
    res[k.decode()]=res.pop(k).decode()#字典的pop方法(刪除),返回的是對應的value
    #這種方法節省內存空間

 三、python操做MongDB性能

mongdb也是非關係型數據庫

import pymongo,re
client = pymongo.MongoClient(host='118.24.3.40',port=27017)
db = client['lina_db']#選擇數據庫,不存在則會幫你建立 裏面集合形式
db['stu_info'].insert({'url':'http://baidu.com','title':'百度','addr':'ddddd'})
for d in db['stu_info'].find({"title":re.compile("百度")}):#正則表達式的模糊查詢
    print(d)
collection = db['stu_info']#選擇表
print(list(collection.find()))#打印全部
collection.delete_one({'title':'百度'})#條件知足多個 只刪除一條
collection.delete_many({'title':'百度'})#條件知足多個,刪除多條
collection.update({'name':'lina'},{'name':'chrislee'})#更新
print(list(collection.find()))
相關文章
相關標籤/搜索