前面系統地學習了java連接mysql數據庫,現在在做python的時候需要用到數據庫,于是自己重新整理了一下數據庫的知識,并且熟悉了python中mysqldb模塊的功能和函數等接口,現在系統地來總結一下吧:
首先你要做的還是下載相應的模塊并且安裝啦,下載地址自己搜,網上有很多,安裝的話也很好辦,安裝之后python的安裝目錄下的Lib文件夾下的 site-packages文件夾下的MySQLdb文件夾,這之中存放的便是該模塊的定義。準備工作做好之后我們需要在源碼中import MySQLdb
?
數據庫的連接
模塊引入之后我們就需要和數據庫進行連接了,實例代碼如下:
立即學習“Python免費學習筆記(深入)”;
db = MySQLdb.connect(“localhost”,”root”,”123456″,”myciti” )
這三個關鍵參數的含義一目了然:第一個為服務器的地址,第二個為用戶名,第三個為dbms密碼,第四個為要訪問的數據庫,其實該connect函數的參數不止這些,不過由于其有默認值而且大多數情況下不用修改,因而省略了。這里做如下列表:
host,連接的數據庫服務器主機名,默認為本地主機(localhost)。 user,連接數據庫的用戶名,默認為當前用戶。 passwd,連接密碼,沒有默認值。 db,連接的數據庫名,沒有默認值。 conv,將文字映射到Python類型的字典。默認為MySQLdb.converters.conversions cursorclass,cursor()使用的種類,默認值為MySQLdb.cursors.Cursor。 compress,啟用協議壓縮功能。 named_pipe,在windows中,與一個命名管道相連接。 init_command,一旦連接建立,就為數據庫服務器指定一條語句來運行。 read_default_file,使用指定的MySQL配置文件。 read_default_group,讀取的默認組。 unix_socket,在unix中,連接使用的套接字,默認使用TCP。 port,指定數據庫服務器的連接端口,默認是3306
大家可能會注意到源碼中沒有用到端口號,這是因為MySQLdb的connect函數的該參數的默認值便是3306,如果你在安裝mysql的時候修改了數據庫的端口號,那么你就需要在源碼中加上該參數的修改值了。
?
執行sql語句
連接上之后便是執行sql語句了,源代碼如下:
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,如果不提交那么數據庫是不會有變化的
將sql語句改變成其他,便可以實現其他靜態的操作,如“delete from article where id > 3”
?
選擇和打印
連接數據庫最重要的目的便是讀取數據庫中的信息,那么如何獲取數據庫中的數據呢?如何提取有效的信息呢?見如下代碼:
下面的程序可以實現打印數據庫中article表中所有行的第二列的數據:
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
?
我們可以從代碼中看出上面的各個函數的區別:
fetchone是從數據庫表中取出一行記錄,第二次調用便取出next行,不斷向下走
fetchall取出數據庫表中所有行的數據
rowcount讀出數據庫表中的行數
?
和java中的占位符一樣,python中也需要這些占位符來實現動態的選擇。見如下代碼:
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中的?占位符還有一點區別,那就是它聲明了類型,和C中的格式輸出是一樣的。注意后面的%
那么返回的data也是一個列表,通過使用[]操作符來訪問特定列的數據。
?
靜態插入和動態插入
靜態插入上面我們已經講了,那么下面我們再講一下動態插入
動態插入也是用占位符來實現的
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訪問數據庫所涉及到的主要的操作,轉載請注明出處