整理python連接MySQL/MongoDB/Redis/memcache數據庫教程

由于經常會用到python連接到mysql操作,有時還會用python連接MongoDB,所以本文就整理出python連接MySQL/MongoDB/Redis/memcache等數據庫的方法,方便查閱。

如何整合redis mongodb mysql
1.業務系統的關聯關系用mysql組織
2.緩存數據用memcached、redis存取
3.大文本數據放進mongodb存取中
4.數據統計計數增加閥值功能
用mysql將memcached、redis、mongodb三者結合起來,
根據實際業務需要看一下哪些適合memcached、redis緩存存取,哪些適合mongodb存取.
核心架構:
1)、應用系統框架架構
2)、數據庫系統業務架構
是影響專案成功失敗的關鍵。
一,python 操作 MySQL:詳情見:

【apt-get install python-mysqldb】
#!/bin/env python
# -*- encoding: utf-8 -*-
#-------------------------------------------------------------------------------
# Purpose:   example for python_to_mysql
# Author:   zhoujy
# Created:   2013-06-14
# update:   2013-06-14
#-------------------------------------------------------------------------------
import MySQLdb
import os
#建立和數據庫系統的連接,格式
#conn  = MySQLdb.connect(host='localhost',user='root',passwd='123456',db='test',port=3306,charset='utf8')
#指定配置文件,確定目錄,或則寫絕對路徑
cwd = os.path.realpath(os.path.dirname(__file__))
db_conf = os.path.join(cwd, 'db.conf')
conn  = MySQLdb.connect(read_default_file=db_conf,host='localhost',db='test',port=3306,charset='utf8')
#要執行的sql語句
query = 'select id from t1'
#獲取操作遊標
cursor = conn.cursor()
#執行SQL
cursor.execute(query)
#獲取一條記錄,每條記錄做爲一個元組返回,返回3,遊標指到第2條記錄。
result1 = cursor.fetchone()
for i in result1:
  print i
#返回影響的行數
  print cursor.rowcount
#獲取指定數量記錄,每條記錄做爲一個元組返回,返回1,2,遊標從第2條記錄開始,遊標指到第4條記錄。
result2 = cursor.fetchmany(2)
for i in result2:
  for ii in i:
    print ii
#獲取所有記錄,每條記錄做爲一個元組返回,返回3,4,7,6,遊標從第4條記錄開始到最後。
result3 = cursor.fetchall()
for i in result3:
  for ii in i:
    print ii
#獲取所有記錄,每條記錄做爲一個元組返回,返回3,4,7,6,遊標從第1條記錄開始
#重置遊標位置,0爲偏移量,mode=absolute | relative,默認爲relative
cursor.scroll(0,mode='absolute')
result3 = cursor.fetchall()
for i in result3:
  for ii in i:
    print ii
#以下2種方法都可以把數據插入數據庫:
#(one)
for i in range (10,20):
  query2 = 'insert into t1 values("%d",now())' %i
  cursor.execute(query2)
  #提交
  conn.rollback()
#(two)
rows = []
for i in range (10,20):
  rows.append(i)
query2 = 'insert into t1 values("%s",now())'
#executemany 2個參數,第2個參數是變量。
cursor.executemany(query2,rows)
#提交
conn.commit()
#選擇數據庫
query3 = 'select id from dba_hospital'
#重新選擇數據庫
conn.select_db('chushihua')
cursor.execute(query3)
result4 = cursor.fetchall()
for i in result4:
  for ii in i:
    print ii
#不定義query,直接執行:
cursor.execute("set session binlog_format='mixed'")
#關閉遊標,釋放資源
cursor.close()
'''


+------+---------------------+
| id | modifyT |
+------+---------------------+
| 3 | 2010-01-01 00:00:00 |
| 1 | 2010-01-01 00:00:00 |
| 2 | 2010-01-01 00:00:00 |
| 3 | 2010-01-01 00:00:00 |
| 4 | 2013-06-04 17:04:54 |
| 7 | 2013-06-04 17:05:36 |
| 6 | 2013-06-04 17:05:17 |
+------+---------------------+
'''
注意:在腳本中,密碼寫在腳本裏面很容易暴露,這樣可以用一個配置文件的方式來存密碼,如db.conf:
[client]
user=root
password=123456


二,python 操作 MongoDB:

#!/bin/env python
# -*- encoding: utf-8 -*-
#-------------------------------------------------------------------------------
# Purpose:   example for python_to_mongodb
# Author:   zhoujy
# Created:   2013-06-14
# update:   2013-06-14
#-------------------------------------------------------------------------------
import pymongo
import os
#建立和數據庫系統的連接,創建Connection時,指定host及port參數
conn  = pymongo.Connection(host='127.0.0.1',port=27017)
#admin 數據庫有帳號,連接-認證-切換庫
db_auth = conn.admin
db_auth.authenticate('sa','sa')
#連接數據庫
db = conn.abc
#連接表
collection = db.stu
#查看全部表名稱
db.collection_names()
#print db.collection_names()
#訪問表的數據,指定列
item = collection.find({},{"sname":1,"course":1,"_id":0})
for rows in item:
  print rows.values()
#訪問表的一行數據
print collection.find_one()
#得到所有的列
for rows in collection.find_one():
  print rows
#插入
collection.insert({"sno":100,"sname":"jl","course":{"D":80,"S":85}})
#或
u = dict(sno=102,sname='zjjj',course={"D":80,"S":85})
collection.insert(u)
#得到行數
print collection.find().count()
print collection.find({"sno":100})
#排序,按照某一列的值。pymongo.DESCENDING:倒序;pymongo.ASCENDING:升序。按照sno倒序
item = collection.find().sort('sno',pymongo.DESCENDING)
for rows in item:
  print rows.values()
#多列排序
item = collection.find().sort([('sno',pymongo.DESCENDING),('A',pymongo.ASCENDING)])
#更新,第一個參數是條件,第二個參數是更新操作,$set,%inc,$push,$ne,$addToSet,$rename 等
collection.update({"sno":100},{"$set":{"sno":101}})
#更新多行和多列
collection.update({"sno":102},{"$set":{"sno":105,"sname":"SSSS"}},multi=True)
#刪除,第一個參數是條件,第二個參數是刪除操作。
collection.remove({"sno":101})
'''
sno:學號;sname:姓名;course:科目
db.stu.insert({"sno":1,"sname":"張三","course":{"A":95,"B":90,"C":65,"D":74,"E":100}})
db.stu.insert({"sno":2,"sname":"李四","course":{"A":90,"B":85,"X":75,"Y":64,"Z":95}})
db.stu.insert({"sno":3,"sname":"趙五","course":{"A":70,"B":56,"F":85,"G":84,"H":80}})
db.stu.insert({"sno":4,"sname":"zhoujy","course":{"A":64,"B":60,"C":95,"T":94,"Y":85}})
db.stu.insert({"sno":5,"sname":"abc","course":{"A":87,"B":70,"Z":56,"G":54,"H":75}})
db.stu.insert({"sno":6,"sname":"楊六","course":{"A":65,"U":80,"C":78,"R":75,"N":90}})
db.stu.insert({"sno":7,"sname":"陳二","course":{"A":95,"M":68,"N":84,"S":79,"K":89}})
db.stu.insert({"sno":8,"sname":"zhoujj","course":{"P":90,"B":77,"J":85,"K":68,"L":80}})
db.stu.insert({"sno":9,"sname":"ccc","course":{"Q":85,"B":86,"C":90,"V":87,"U":85}})
'''


計算Mongodb文檔中各集合的數目:

import pymongo
conn  = pymongo.Connection(host='127.0.0.1',port=27017)
db = conn.abc  #abc文檔
for tb_name in db.collection_names():   #循環出各集合名
  Count = db[tb_name].count()      #計算各集合的數量
  if Count > 2:                 #過濾條件
    print tb_name + ':' + str(Count)
'''
conn  = pymongo.Connection(host='127.0.0.1',port=27017)
db = conn.abc
for tb_name in db.collection_names():
  print tb_name + ':'
  exec('print ' + 'db.'+tb_name+'.count()')   #變量當集合的處理方式
OR
conn  = pymongo.Connection(host='127.0.0.1',port=27017)
db = conn.abc
for tb_name in db.collection_names():
  mon_dic=db.command("collStats", tb_name)   #以字典形式返回
  print mon_dic.get('ns'),mon_dic.get('count')
'''


三,python 操作 Redis:

#!/bin/env python
# -*- encoding: utf-8 -*-
#-------------------------------------------------------------------------------
# Purpose:   example for python_to_mongodb
# Author:   zhoujy
# Created:   2013-06-14
# update:   2013-06-14
#-------------------------------------------------------------------------------
import redis
f = open('aa.txt')
while True:
  line = f.readline().strip().split(' # ')
  if line == ['']:
    break
  UserName,Pwd,Email = line
#  print name.strip(),pwd.strip(),email.strip()
  rc = redis.StrictRedis(host='127.0.0.1',port=6379,db=15)
  rc.hset('Name:' + UserName,'Email',Email)
  rc.hset('Name:' + UserName,'Password',Pwd)
f.close()
alluser = rc.keys('*')
#print alluser
print "===================================讀出存進去的數據==================================="
for user in alluser:
  print ' # '.join((user.split(':')[1],rc.hget(user,'Password'),rc.hget(user,'Email')))


四,python 操作 memcache:

import memcache
mc = memcache.Client(['127.0.0.1:11211'],debug=1)
#!/usr/bin/env python
#coding=utf-8
import MySQLdb
import memcache
import sys
import time
def get_data(mysql_conn):
#  nn = raw_input("press string name:")
  mc = memcache.Client(['127.0.0.1:11211'],debug=1)
  t1 =time.time()
  value = mc.get('zhoujinyia')
  if value == None:
    t1 = time.time()
    print t1
    query = "select company,email,sex,address from uc_user_offline where realName = 'zhoujinyia'"
    cursor= mysql_conn.cursor()
    cursor.execute(query)
    item = cursor.fetchone()
    t2 = time.time()
    print t2
    t = round(t2-t1)
    print "from mysql cost %s sec" %t
    print item
    mc.set('zhoujinyia',item,60)
  else :
    t2 = time.time()
    t=round(t2-t1)
    print "from memcache cost %s sec" %t
    print value
if __name__ =='__main__':
  mysql_conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='123456',db='member',port=3306,charset='utf8')
  get_data(mysql_conn)


更多相關文章
  • 本文章來給大家介紹CentOS 源碼安裝 MySQL 5.6.12數據庫教程,有需要學習源碼安裝mysql數據庫的同學不防進入參考.1:下載:當前mysql版本到了5.6.12下載地址:http://dev.mysq
  • php教程連接mssql 2005 1.下載以下兩個文件,放入php ext目錄及system32php_sqlsrv_52_ts_vc6.dll (線程安全)php_sqlsrv_52_nts_vc6.dll (非
  • 在Ubuntu 源碼編譯安裝mysql 5.6.12數據庫需要使用cmake編譯,如果我們沒有安裝cmake,就必須先安裝cmake,然後再利用cmake編譯安裝mysql數據庫了,下面大家和我一起看看環境 ubun
  • asp.net 連接mssql mysql access Excel 2007數據庫 本文章收藏了了一款asp.net 連接mssql mysql access Excel 2007數據庫,下面分類好了,只要複制過去
  • 連接Access數據庫教程需要導入額外的命名空間,所以有了最前面的兩條using命令,這是必不可少的! strConnection這個變量裏存放的是連接數據庫所需要的連接字符串,他指定了要使用的數據提供者和要使用的數據源. "Provider=Microsoft.Jet.OleDb.4.0 ...
  • mongodb redis數據庫是現在除了mysql數據庫之外一個非常不錯的免費開源數據庫了,下面我們一起來看在windows下安裝mongodb redis數據庫的方法吧.一:redis安裝 php擴展 dll 下載地址https://github.com/phpredis/phpredis/do
  • 本文章來給各位同學介紹在windows中安裝MongoDB數據庫的方法,MongoDB是一種由C++寫的數據庫並且數據操作有點像json格式了,下面我來介紹具體的操作辦法.1).下載MongoDBhttp://downloads.mongodb.org/win32/mongodb-win32-i38 ...
  • 在數據庫來說mysql可適合中小型企業級的數據開發,但是在oracle可以是超大型的數據應用,如果baidu,sina這類都用到了orace數據庫,下面我們來看如何在mysql數據庫遷移到oracle數據庫時不出現問題和注意事項.1. 自動增長的數據類型處理 MYSQL有自動增長的數據類型,插入記錄 ...
一周排行
  • php中count 多維數組長度統計實現方法 有需要的朋友可參考一下下.下面程序運行結果爲() 代碼如下 ?$numb=array( array(10,15,30),array(10,15,30),array(10,
  • function _pageft($totle, $displaypg = 20, $url = '') { global $page, $firstcount, $pagenav, $_server; $globa
  • 本文章來爲各位介紹一篇zblog搜索頁面美化和搜索結果分頁的教程了,這個是php版本的各位如果使用的是這個版本可以進來參考一下.zblog php的搜索結果頁面調用的是單頁面,不能自定義,不能分頁,醜且不人性化.Se
  • preg_match函數執行正則規則就可以過濾url中指定的一些字符了,下面來看一個url參數過程中由preg_match過濾一些字符的例子.PHP開發中經常用到URL傳遞參數,對傳遞的參數要進行安全過濾,過濾URL ...
  • 蘋果iPhone6 plus搜索不到wifi信號怎麽解決
    明明是有wifi信號了但是發現iphone搜索不到了,朋友的三星手機都可以正常的上網了,那
  • Distributed Replicated Block Device(DRBD)是一個用軟件實現的.無共享的.伺服器之間鏡像塊設備內容的存儲複制解決方案.數據鏡像:及時.透明.同步(所有伺服器都成功後返回).異步( ...
  • iphone4升級iOS8.2會不會卡蘋果4升級ios8.2卡不卡
    升級iOS8.2是現在各種果粉比較關注的一個問題了,但小編使用的是蘋果4了,那麽蘋果4可以
  • 下文爲各位介紹一個Cocos2d-x Lua/Javascript腳本代碼加密實現例子,有需要的朋友可進入參考.在遊戲開發中,腳本作爲一種資源文件,就像圖片視頻一樣,被引擎所引用,使用腳本做遊戲的好處就在于可以線上p
  • iPad3怎麽升級iOS8.2iPad3升級iOS8.2的方法圖解
    iPad3怎麽升級iOS8.2呢?ios8.2雖然目前官方還沒有出來但一聚教程小編知道這款
  • 只在一次請求中保存,伺服器跳轉後仍然有效設置request屬性範圍 request_scope_01.jsp 代碼如下 <%@ page language="java" contentTyp ...