標籤:
一、下面我們所說的就是串連mysql的應用:
1、其實在python中串連操作mysql的模組有多個,在這裡我只給大家示範pymysql這一個模組(其實我是感覺它比較好用而已):
pymysql是第三方的一個模組,需要我們自己安裝,在這裡順便給大家普及一下安裝第三方模組的知識;首先,如果我們在windows上安裝的話,需要先安裝python解譯器,然后里面內建
了pip模組(我們安裝第三方模組,都是需要這個命令去安裝的),配置完環境變數之後我們就可以直接在dos命令列中執行要安裝的模組了,如下:
我這裡是已經安裝過的,所以提示讓我更新,在你安裝過pymysql模組之後,就可以直接去調用了,下面我們來看一個小例子,根據這個小例子來進行說明:
1 import pymysql 2 3 #連結資料庫,並建立遊標 4 conn = pymysql.connect(host=‘192.168.163.131‘,port=3306,user=‘mysql_test‘,passwd=‘123456‘,db=‘pymysql‘) 5 cur = conn.cursor() 6 7 # cur.execute(‘create table t1(id INT(10),name VARCHAR(20))ENGINE=InnoDB DEFAULT CHARSET=utf8‘) 8 9 # cur.execute(‘insert into t1(id,name) VALUES (1001,"madaqiang")‘)10 count = cur.executemany(‘insert into t1(id,name ) VALUES (%s,%s)‘,[(1002,‘eric‘),(1003,‘tom‘)])11 12 conn.commit()13 14 cur.close()15 conn.close()
解釋說明:
首先使用pymysql的connect方法去串連資料庫,裡面的參數我相信大家都能看懂,那個cur是建立的一個遊標(執行sql,都是使用這個遊標去執行的);下面就開始執行sql語句
注釋的那兩行,分別是建立一個t1表,然後往裡面插入一條資料,下面那個executemany是可以一次插入多條記錄,每個記錄是一個元祖,count是受影響的行數;最後你需要執行
commit()方法,不然,你做的這些都是白費的,然後把遊標和串連都關閉。
簡單的串連就是這樣的簡單。下面我們再來看看遊標的問題,相信很多的人一開始的時候跟我一樣,對這個遊標理解不是那麼準確,下面我們來兩段代碼,你就明白了:
1 conn = pymysql.connect(host=‘192.168.163.131‘,port=3306,user=‘mysql_test‘,passwd=‘123456‘,db=‘pymysql‘) 2 cur = conn.cursor() 3 cur.execute(‘select * from t1‘) 4 5 # cur.scroll(1,mode=‘relative‘) 6 7 #取出第一條資料 8 line = cur.fetchone() 9 print(line)10 #取出所有的資料11 all_line = cur.fetchall()12 print(all_line)13 conn.commit()14 15 cur.close()16 conn.close()
首先我們先來看這段代碼,其中新增的兩條已經在代碼中標註了,就是取出第一條資料和所有的資料,但是我們看下面的輸出結果,你就會發現一些問題了:
1 (1001, ‘madaqiang‘)2 ((1002, ‘eric‘), (1003, ‘tom‘))
在你輸出第一條資料之後,遊標就遊到了第二條資料上,你再輸出所有的資料,其實就是從第二行開始輸出的;如果你不想輸出1002這條記錄,你可以在第九行的下面加一條這樣的語句:
cur.scroll(1,mode=‘relative‘),這樣就不會輸出了,如果你感覺輸出的元祖,以後調用的話會比較麻煩,我們可以設定成輸出格式為字典的格式,這樣不管是看還是調用都比較方便了:
其實我們只需要在建立遊標的下面加上cur = conn.cursor(cursor=pymysql.cursors.DictCursor),這樣一行代碼就OK了,還是輸出一下結果吧,不然總感覺少點什麼:
1 #連結資料庫,並建立遊標 2 conn = pymysql.connect(host=‘192.168.163.131‘,port=3306,user=‘mysql_test‘,passwd=‘123456‘,db=‘pymysql‘) 3 cur = conn.cursor() 4 #把輸出的格式轉換成 5 cur = conn.cursor(cursor=pymysql.cursors.DictCursor) 6 7 cur.execute(‘select * from t1‘) 8 9 10 #取出第一條資料11 line = cur.fetchone()12 print(line)13 14 conn.commit()15 16 cur.close()17 conn.close(
=====================輸出結果=======================
{‘name‘: ‘madaqiang‘, ‘id‘: 1001}
2、下面我們再來看看一個ORM架構(SQLAlchemy),
SQLAlchemy是Python世界中最廣泛使用的ORM工具之一,它採用了類似與Java裡Hibernate的資料對應模型,而不是其他ORM架構採用的Active Record模型,SQLAlchemy分為兩部分,一個是常用的ORM對象映射,另一個是核心的SQL expression。第一個很好理解,純粹的ORM,後面這個不是ORM,而是DBAPI的封裝,通過一些sql運算式來避免了直接寫sql語句。簡單的概括一下就是:將對象轉換成SQL,然後使用資料API執行SQL並擷取執行結果。
下面來一下看一下SQLAlchemy的ORM的實現機制,內部封裝了些什麼:
中的Dialect用於和資料API進行交流,根據設定檔的不同調用不同的資料庫API,從而實現對資料庫的操作,如:
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
python 串連操作資料庫