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()))