Python連接mysql數(shù)據(jù)庫(kù)

前面系統(tǒng)地學(xué)習(xí)了java連接mysql數(shù)據(jù)庫(kù),現(xiàn)在在做python的時(shí)候需要用到數(shù)據(jù)庫(kù),于是自己重新整理了一下數(shù)據(jù)庫(kù)的知識(shí),并且熟悉了python中mysqldb模塊的功能和函數(shù)等接口,現(xiàn)在系統(tǒng)地來(lái)總結(jié)一下吧:

首先你要做的還是下載相應(yīng)的模塊并且安裝啦,下載地址自己搜,網(wǎng)上有很多,安裝的話也很好辦,安裝之后python的安裝目錄下的Lib文件夾下的 site-packages文件夾下的MySQLdb文件夾,這之中存放的便是該模塊的定義。準(zhǔn)備工作做好之后我們需要在源碼中import MySQLdb

?

數(shù)據(jù)庫(kù)的連接

模塊引入之后我們就需要和數(shù)據(jù)庫(kù)進(jìn)行連接了,實(shí)例代碼如下:

立即學(xué)習(xí)Python免費(fèi)學(xué)習(xí)筆記(深入)”;

db = MySQLdb.connect(“localhost”,”root”,”123456″,”myciti” )

這三個(gè)關(guān)鍵參數(shù)的含義一目了然:第一個(gè)為服務(wù)器的地址,第二個(gè)為用戶名,第三個(gè)為dbms密碼,第四個(gè)為要訪問的數(shù)據(jù)庫(kù),其實(shí)該connect函數(shù)的參數(shù)不止這些,不過由于其有默認(rèn)值而且大多數(shù)情況下不用修改,因而省略了。這里做如下列表:

host,連接的數(shù)據(jù)庫(kù)服務(wù)器主機(jī)名,默認(rèn)為本地主機(jī)(localhost)。  user,連接數(shù)據(jù)庫(kù)的用戶名,默認(rèn)為當(dāng)前用戶。  passwd,連接密碼,沒有默認(rèn)值。  db,連接的數(shù)據(jù)庫(kù)名,沒有默認(rèn)值。  conv,將文字映射到Python類型的字典。默認(rèn)為MySQLdb.converters.conversions  cursorclass,cursor()使用的種類,默認(rèn)值為MySQLdb.cursors.Cursor。  compress,啟用協(xié)議壓縮功能。  named_pipe,在windows中,與一個(gè)命名管道相連接。  init_command,一旦連接建立,就為數(shù)據(jù)庫(kù)服務(wù)器指定一條語(yǔ)句來(lái)運(yùn)行。  read_default_file,使用指定的MySQL配置文件。  read_default_group,讀取的默認(rèn)組。  unix_socket,在unix中,連接使用的套接字,默認(rèn)使用TCP。  port,指定數(shù)據(jù)庫(kù)服務(wù)器的連接端口,默認(rèn)是3306

大家可能會(huì)注意到源碼中沒有用到端口號(hào),這是因?yàn)镸ySQLdb的connect函數(shù)的該參數(shù)的默認(rèn)值便是3306,如果你在安裝mysql的時(shí)候修改了數(shù)據(jù)庫(kù)的端口號(hào),那么你就需要在源碼中加上該參數(shù)的修改值了。

?

執(zhí)行sql語(yǔ)句

連接上之后便是執(zhí)行sql語(yǔ)句了,源代碼如下:

import MySQLdb

db = MySQLdb.connect(“localhost”,”root”,”123456″,”myciti” )
cursor = db.cursor()
sql = “””insert into article values (0,”woainimahah”,”http://www.aa.com”,”2012-9-8″,”wo”,”qq”,”skjfasklfj”,”2019″,”up”)”””
try:
? ? cursor.execute(sql)
? ? db.commit()
except:
? ? db.rollback()
db.close

?

這里需要注意的是一定要記得commit,如果不提交那么數(shù)據(jù)庫(kù)是不會(huì)有變化的

將sql語(yǔ)句改變成其他,便可以實(shí)現(xiàn)其他靜態(tài)的操作,如“delete from article where id > 3”

?

選擇和打印

連接數(shù)據(jù)庫(kù)最重要的目的便是讀取數(shù)據(jù)庫(kù)中的信息,那么如何獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)呢?如何提取有效的信息呢?見如下代碼:

下面的程序可以實(shí)現(xiàn)打印數(shù)據(jù)庫(kù)中article表中所有行的第二列的數(shù)據(jù):

import MySQLdb

db = MySQLdb.connect(“localhost”,”root”,”123456″,”myciti” )
cursor = db.cursor()
cursor.execute(“select * from article”)
data = cursor.fetchone()
while data!=None:
? ? print data[1]
? ? data = cursor.fetchone()
db.close

我們也可以使用如下代碼:

import MySQLdb

db = MySQLdb.connect(“localhost”,”root”,”123456″,”myciti” )
cursor = db.cursor()
cursor.execute(“select * from article”)
datas = cursor.fetchall()
for data in datas:
? ? print data[1]
print cursor.rowcount,”rows in tatal”
db.close

?

我們可以從代碼中看出上面的各個(gè)函數(shù)的區(qū)別:

fetchone是從數(shù)據(jù)庫(kù)表中取出一行記錄,第二次調(diào)用便取出next行,不斷向下走

fetchall取出數(shù)據(jù)庫(kù)表中所有行的數(shù)據(jù)

rowcount讀出數(shù)據(jù)庫(kù)表中的行數(shù)

?

和java中的占位符一樣,python中也需要這些占位符來(lái)實(shí)現(xiàn)動(dòng)態(tài)的選擇。見如下代碼:

import MySQLdb

a = “down”
b = 4
db = MySQLdb.connect(“localhost”,”root”,”123456″,”myciti” )
cursor = db.cursor()
cursor.execute(“select * from article where trend = ‘%s’ and id datas = cursor.fetchall()
for data in datas:
? ? print data[1]
print cursor.rowcount,”rows in tatal”
db.close

這里的占位符和java中的?占位符還有一點(diǎn)區(qū)別,那就是它聲明了類型,和C中的格式輸出是一樣的。注意后面的%

那么返回的data也是一個(gè)列表,通過使用[]操作符來(lái)訪問特定列的數(shù)據(jù)。

?

靜態(tài)插入和動(dòng)態(tài)插入

靜態(tài)插入上面我們已經(jīng)講了,那么下面我們?cè)僦v一下動(dòng)態(tài)插入

動(dòng)態(tài)插入也是用占位符來(lái)實(shí)現(xiàn)的

import MySQLdb

title = “wangxinmeiwo”
url = “henxiangni “
db = MySQLdb.connect(“localhost”,”root”,”123456″,”myciti” )
cursor = db.cursor()
sql = “””insert into article values (0,”%s”,”%s”,”2012-9-8″,”wo”,”qq”,”skjfasklfj”,”2019″,”up”)”””
try:
? ? cursor.execute(sql%(title,url))
? ? db.commit()
except:
? ? db.rollback()
db.close

可以看到這里的占位符和上面的使用方式是一樣的

?

?

update操作

占位符的使用和上面是一樣的

import MySQLdb

title = “haoxiangni”
id=11
db = MySQLdb.connect(“localhost”,”root”,”123456″,”myciti” )
cursor = db.cursor()
sql = “””update article set title = “%s” where id = “%d” “””
try:
? ? cursor.execute(sql%(title,id))
? ? db.commit()
except:
? ? db.rollback()
db.close

?

以上便是python訪問數(shù)據(jù)庫(kù)所涉及到的主要的操作,轉(zhuǎn)載請(qǐng)注明出處

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊5 分享