當前位置:成語大全網 - 書法字典 - python如何連接mysql數據庫?

python如何連接mysql數據庫?

1,與數據庫建立連接。

2.執行sql語句並接收返回值。

3.關閉數據庫連接

1,MySQL數據庫中使用了MySQLdb模塊,但是Python用來鏈接MySQL的第三方庫MySQLdb不支持Python3.x

特別說明:我在電腦上做實驗的時候,我的python是2.7.2版本。安裝相應版本的Mysqldb後,就可以直接運行並成功連接數據庫,所以如果大家都和我壹樣流暢的話,下面就不用看了,直接跳過來看第2點的SQL語句如何執行!如果安裝後出現異常,可以參考以下解決方法。

連接的關鍵是安裝MySQLdb模塊,下載Python對應的版本:

下載安裝後會自動檢測電腦Python的安裝路徑,自動填充模塊解壓路徑(我的是:d:\ program files \ active Python 2 . 6 . 6 . 17 \ lib \ site-packages \)。

但解壓後無法使用,MySQLdb模塊下的部分文件需要修改:

①.查找__init__。MySQLdb目錄中的py(我的是:d:\ program files \ active python 2 . 6 . 6 . 17 \ lib \ site-packages \ MySQLdb):

來自setsimport ImmutableSet和DBAPISet(ImmutableSet)類:在註釋的第34行和第35行,在它們後面添加DBAPISet(frozenset)類:

#從集合導入不可變集合

# class DBAPISet(ImmutableSet):

DBAPISet類(frozenset):

②.打開轉換器. py:

註意從Sets導入BaseSet,第37行Set,把第45行return set ([I for I in s split(',')ifi])中的Set改為Set;同樣,將129行Set: Set2Str中的Set改為Set(不要修改Set2Str),修改到此結束。

2.建立數據庫連接

導入MySQLdb

conn = mysqldb . connect(host = " localhost ",user="root ",passwd="sa ",db="mytable ")

更常用的參數包括

Host:連接的數據庫服務器的主機名;默認值為localhost。

用戶:數據庫登錄名。默認為當前用戶。

Passwd:數據庫登錄的秘密。默認情況下,它是空的。

Db:要使用的數據庫名稱。沒有默認值。

端口:MySQL服務使用的TCP端口。默認值為3306。

Conn連接有兩個重要的方法:提交添加和修改,回滾以取消添加或修改。

3.執行數據庫操作

n =遊標. execute(sql,param)

我們將通過連接對象得到壹個cursor對象,然後我們將使用cursor提供的方法來工作。

這些方法包括兩類:1。執行命令和2。接收返回值。

遊標執行命令的方法:

Callproc(self,procname,args):用於執行存儲過程。收到的參數是存儲過程名稱和參數列表,返回值是受影響的行數。

Execute(self,query,args):執行壹條sql語句。收到的參數是sql語句本身和使用的參數列表,返回值是受影響的行數。

Executemany(self,query,args):執行壹對壹的sql語句,但是重復執行參數表中的參數,返回值是受影響的行數。

Nextset(self):移動到下壹個結果集。

遊標用來接收返回值的方法:

Fetchall(self):接收所有返回的結果行。

Fetchmany(self,size=None):接收size以返回結果行。如果size的值大於返回的結果行數,將返回cursor.arraysize數據。

Fetchone(self):返回壹個結果行。

Scroll (self,value,mode='relative '):將指針移動到某壹行。如果mode =' relative ',則意味著從當前行移動值條;如果mode='absolute ',則意味著從結果集的第壹行開始移動值欄。

下面的代碼是壹個完整的例子。

#使用sql語句,此處接收的所有參數都使用%s占位符。請註意,無論您要插入什麽類型的數據,占位符總是使用% s。

sql= "插入到cdinfo值(%s,%s,%s,%s,%s)"

#param應該是元組或列表。

param=(標題,歌手,imgurl,url,alpha)

#執行,如果成功,n的值是1。

n =遊標. execute(sql,param)

#再次執行查詢操作。

cursor . execute(" select * from cdinfo ")

#我們使用fetchall的方法。這樣,查詢返回的所有結果都將存儲在cds中。每個結果都是壹個元組類型的數據,這些元組形成壹個元組。

cds=cursor.fetchall()

#因為是元組,所以可以這樣使用結果集。

打印光盤[0][3]

#或者直接顯示出來,看看結果集到底是什麽樣子。

打印CD

#如果需要批量插入數據,請這樣做。

sql="insert into cdinfo值(0,%s,%s,%s,%s,%s)"

#每個值的集合是壹個元組,整個參數集構成壹個元組,或者說壹個列表。

param=((title,singer,imgurl,url,alpha),(title2,singer2,imgurl2,url2,alpha2))

#使用executemany方法批量插入數據。這真是壹個很酷的方法!

n=cursor.executemany(sql,param)

需要註意的是(或者我覺得奇怪)在插入、刪除或者修改之後,需要調用conn.commit()方法提交。這樣,數據才會真正保存在數據庫中。不知道是不是我的mysql設置問題。簡而言之,當我今天開始使用它時,如果我不使用commit,數據不會保留在數據庫中,但它確實保留在數據庫中。

4.關閉數據庫連接

您需要分別關閉指針對象和連接對象。他們有相同的名字。

cursor.close()

conn.close()

5、

5編碼(防止亂碼)

註意事項:

1 Python文件設置編碼為utf-8(文件前面有#encoding=utf-8)。

2 MySQL數據庫charset=utf-8

3 Python用參數charset=utf8連接MySQL。

4將Python的默認編碼設置為UTF-8(sys . setdefaultencoding(UTF-8))。

#編碼=utf-8

導入系統

導入MySQLdb

重新加載(系統)

sys.setdefaultencoding('utf-8 ')

db=MySQLdb.connect(user='root ',charset='utf8 ')

註意:MySQL的配置文件設置也必須配置為utf8。

6.模塊功能演示

#!/usr/bin/python

導入MySQLdb

con = mysqldb . connect(host = ' localhost ',user='root ',passwd='root ',db='abc ')

遊標=con.cursor()

sql ="select * from myt "

遊標. execute(sql)

row=cursor.fetchone()

打印行

cursor.close()

con.close()

執行以下SQL語句以獲取返回值:

//獲取連接的光標

cursor=conn.cursor()

//查詢

sql = "select * from table "

//添加

Sql = "插入表(字段,字段)值(值) "

//修改

Sql = "更新表集字段= '值' where條件"

//刪除

Sql = "從表中刪除where條件"

遊標. execute(sql)

返回值

cur.execute('select * from tables ')

返回值是SQL語句獲得的行數,比如2L,表示2行。

然後,可以從對象的fetchone或fetchall方法中獲取行信息。

獲取行信息

指針對象的fetchone()方法是壹次獲取壹行的元組返回值:

引用

& gt& gt& gtrow=cur.fetchone()

& gt& gt& gt打印行

(' user1 ',' 52c 69 E3 a 57331081823331 C4 e 69 d3f 2 e ',1000L,1000L,'/home/FTP/user1 ','')

指針對象的Fetchall()方法可以取出指針結果集中的所有行,返回的結果集是壹個元組:

引用

& gt& gt& gtcur.scroll(0,'絕對')

& gt& gt& gtrow=cur.fetchall()

& gt& gt& gt打印行

((' user1 ',' 52c 69 E3 a 57331081823331 C4 e69 d3f 2 e ',1000L,1000L,'/home/FTP/user1 ',''),(' user2 ',' 7 e58d 63 b 60197 CEB 55 a 65448

移動指針

當使用fetchone()方法時,指針會移動。因此,如果指針沒有復位,使用fetchall的信息將只包含指針後面的行內容。

使用以下方式手動移動指針:

cur.scroll(int,parm)

意思是:

引用

Int:移動的行數,整數;在相對模式中,正數向下移動,負數向上移動。

Parm:運動的方式;默認是相對的,相對模式;絕對模式是可以接受的。

更新數據

修改數據,包括插入、更新和刪除。它們都是使用指針對象的execute()方法執行的:

cur . execute(" insert into table(row 1,row2)值(' 111 ',' 222 ')")

cur . execute(" update table set row 1 = ' test ' where row 2 = ' row 2 ' ")

cur . execute(" delete from table where row 1 = ' row 1 ' ")

因為單引號“”用於SQL語句中的標識,所以python中的字符串需要用雙引號括起來。

此外,還可以使用python的“格式字符串”編寫方法來簡化命令,比如:

cur . execute(" update table set row 1 = ' % s ',其中row 2 = ' % s ' "(' value 1 ',' value2 '))

※請註意,' %s '的單引號是SQL語句的間隔符,' value1 '的單引號是python的字符串間隔符,兩者含義不同。是否需要間隔符,用雙引號還是單引號做間隔符,要看它的意思。例如,有:

cur . execute(" update FTPUSERS set passwd = % s,其中userid = ' % s ' "(" MD5(' 123 ')",' user2 '))

這裏paswd=%s是因為SQL的md5()函數不需要單引號區間;“md5('123 ')”是帶單引號的python字符串,所以用雙引號括起來。

提交更改

正常情況下,MySQLdb模塊會自動提交修改。但是在我們更新數據之後,我們手動運行壹次:

conn.commit()

關閉數據庫連接

您需要分別關閉指針對象和連接對象。他們有相同的名字。

cursor.close()

conn.close()