首頁  >  文章  >  資料庫  >  Python連接mysql資料庫

Python連接mysql資料庫

高洛峰
高洛峰原創
2016-11-23 11:44:191162瀏覽

前面系統地學習了java連接mysql數據庫,現在在做python的時候需要用到數據庫,於是自己重新整理了一下數據庫的知識,並且熟悉了python中MysqlDB模組的功能和函數等接口,現在系統地來總結一下:

首先你要做的還是下載相應的模組並且安裝啦,下載地址自己搜,網上有很多,安裝的話也很好辦,安裝之後python的安裝目錄下的Lib文件夾下的site -packages資料夾下的MySQLdb資料夾,這之中存放的便是該模組的定義。準備工作做好之後我們需要在原始碼中import MySQLdb

 

資料庫的連線

模組引入之後我們就需要和資料庫連線了,執行個體程式碼如下:

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("localSQLdb " )
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:

 

這裡需要注意的是一定要記得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:
    printsor cur1] .fetchone()
db.close

我們也可以使用以下程式碼:

import MySQLdb

db = MySQLdb.connect("localhost","root","123456", MySQLdb.connect("localhost","root","123456","myccur" ) .cursor()
cursor.execute("select * from article")
datas = cursor.fetchall()
for data in datas:
    print data[1]
print cursor.rowcount,"rows in   print data[1]
print cursor.rowcount," close

 

我們可以從程式碼中看出上面的各個函數的區別:

fetchone是從資料庫表中取出一行記錄,第二次調用便取出next行,不斷向下走

etchall取出資料庫表中所有行的資料

rowcount讀出資料庫表中的行數

 

和java中的佔位符一樣,python中也需要這些佔位符來實現動態的選擇。請參閱下列程式碼:

import MySQLdb

a = "down"

b = 4
db = MySQLdb.connect("localhost","root","123456","myciti" )
cur = )
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" )curcur( S) = """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 = "g ","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

.轉載請註明出處


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn