python搭配什么数据库_python 连接操作数据库(一)
一、下面我們所說的就是連接mysql的應用:
1、其實在python中連接操作mysql的模塊有多個,在這里我只給大家演示pymysql這一個模塊(其實我是感覺它比較好用而已):
pymysql是第三方的一個模塊,需要我們自己安裝,在這里順便給大家普及一下安裝第三方模塊的知識;首先,如果我們在windows上安裝的話,需要先安裝python解釋器,然后里面自帶
了pip模塊(我們安裝第三方模塊,都是需要這個命令去安裝的),配置完環(huán)境變量之后我們就可以直接在cmd命令行中執(zhí)行要安裝的模塊了,如下:
我這里是已經(jīng)安裝過的,所以提示讓我更新,在你安裝過pymysql模塊之后,就可以直接去調(diào)用了,下面我們來看一個小例子,根據(jù)這個小例子來進行說明:
1 importpymysql2
3 #鏈接數(shù)據(jù)庫,并創(chuàng)建游標
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方法去連接數(shù)據(jù)庫,里面的參數(shù)我相信大家都能看懂,那個cur是創(chuàng)建的一個游標(執(zhí)行sql,都是使用這個游標去執(zhí)行的);下面就開始執(zhí)行sql語句
注釋的那兩行,分別是創(chuàng)建一個t1表,然后往里面插入一條數(shù)據(jù),下面那個executemany是可以一次插入多條記錄,每個記錄是一個元祖,count是受影響的行數(shù);最后你需要執(zhí)行
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 #取出第一條數(shù)據(jù)
8 line =cur.fetchone()9 print(line)10 #取出所有的數(shù)據(jù)
11 all_line =cur.fetchall()12 print(all_line)13 conn.commit()14
15 cur.close()16 conn.close()
首先我們先來看這段代碼,其中新增的兩條已經(jīng)在代碼中標注了,就是取出第一條數(shù)據(jù)和所有的數(shù)據(jù),但是我們看下面的輸出結(jié)果,你就會發(fā)現(xiàn)一些問題了:
1 (1001, 'madaqiang')2 ((1002, 'eric'), (1003, 'tom'))
在你輸出第一條數(shù)據(jù)之后,游標就游到了第二條數(shù)據(jù)上,你再輸出所有的數(shù)據(jù),其實就是從第二行開始輸出的;如果你不想輸出1002這條記錄,你可以在第九行的下面加一條這樣的語句:
cur.scroll(1,mode='relative'),這樣就不會輸出了,如果你感覺輸出的元祖,以后調(diào)用的話會比較麻煩,我們可以設置成輸出格式為字典的格式,這樣不管是看還是調(diào)用都比較方便了:
其實我們只需要在創(chuàng)建游標的下面加上cur = conn.cursor(cursor=pymysql.cursors.DictCursor),這樣一行代碼就OK了,還是輸出一下結(jié)果吧,不然總感覺少點什么:
1 #鏈接數(shù)據(jù)庫,并創(chuàng)建游標
2 conn = pymysql.connect(host='192.168.163.131',port=3306,user='mysql_test',passwd='123456',db='pymysql')3 cur =conn.cursor()4 #把輸出的格式轉(zhuǎn)換成
5 cur = conn.cursor(cursor=pymysql.cursors.DictCursor)6
7 cur.execute('select * from t1')8
9
10 #取出第一條數(shù)據(jù)
11 line =cur.fetchone()12 print(line)13
14 conn.commit()15
16 cur.close()17 conn.close(
=====================輸出結(jié)果=======================
{'name': 'madaqiang', 'id': 1001}
2、下面我們再來看看一個ORM框架(SQLAlchemy),
SQLAlchemy是Python世界中最廣泛使用的ORM工具之一,它采用了類似與Java里Hibernate的數(shù)據(jù)映射模型,而不是其他ORM框架采用的Active Record模型,SQLAlchemy分為兩部分,一個是常用的ORM對象映射,另一個是核心的SQL expression。第一個很好理解,純粹的ORM,后面這個不是ORM,而是DBAPI的封裝,通過一些sql表達式來避免了直接寫sql語句。簡單的概括一下就是:將對象轉(zhuǎn)換成SQL,然后使用數(shù)據(jù)API執(zhí)行SQL并獲取執(zhí)行結(jié)果。
下面來一下看一下SQLAlchemy的ORM的實現(xiàn)機制,內(nèi)部封裝了些什么:
上圖中的Dialect用于和數(shù)據(jù)API進行交流,根據(jù)配置文件的不同調(diào)用不同的數(shù)據(jù)庫API,從而實現(xiàn)對數(shù)據(jù)庫的操作,如:
mysql+pymysql://:@/[?]
總結(jié)
以上是生活随笔為你收集整理的python搭配什么数据库_python 连接操作数据库(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小程序 pagescrollto_微信小
- 下一篇: python3 rid1.7.4.2 控