Python MySQLdb模組程式設計初探

2021-06-23 00:25:58 字數 4293 閱讀 7519

import mysqldb 

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

提供的connect方法用來和資料庫建立連線,接收數個引數,返回連線物件. 

比較常用的引數包括

host:資料庫主機名.預設是用本地主機. 

user:資料庫登陸名.預設是當前使用者. 

passwd:資料庫登陸的秘碼.預設為空. 

db:要使用的資料庫名.沒有預設值. 

port:mysql服務使用的tcp埠.預設是3306.

charset:資料庫編碼.

更多關於引數的資訊可以查這裡 

然後,這個連線物件也提供了對事務操作的支援,標準的方法 

commit() 提交 

rollback() 回滾 

cursor=conn.cursor() 

n=cursor.execute(sql,param) 

首先,我們用使用連線物件獲得乙個cursor物件,接下來,我們會使用cursor提供的方法來進行工作.這些方法包括兩大類:1.執行命令,2.接收返回值 

cursor用來執行命令的方法:

callproc(self, procname, args):用來執行儲存過程,接收的引數為儲存過程名和引數列表,返回值為受影響的行數 

execute(self, query, args):執行單條sql語句,接收的引數為sql語句本身和使用的引數列表,返回值為受影響的行數 

executemany(self, query, args):執行單條sql語句,但是重複執行引數列表裡的引數,返回值為受影響的行數 

nextset(self):移動到下乙個結果集 

cursor用來接收返回值的方法:

fetchall(self):接收全部的返回結果行. 

fetchmany(self, size=none):接收size條返回結果行.如果size的值大於返回的結果行的數量,則會返回cursor.arraysize條資料. 

fetchone(self):返回一條結果行. 

scroll(self, value, mode='relative'):移動指標到某一行.如果mode='relative',則表示從當前所在行移動value條,如果mode='absolute',則表示從結果集的第一行移動value條. 

下面的**是乙個完整的例子. 

#使用sql語句,這裡要接收的引數都用%s佔位符.要注意的是,無論你要插入的資料是什麼型別,佔位符永遠都要用%s 

sql="insert into cdinfo values(%s,%s,%s,%s,%s)" 

#param應該為tuple或者list 

param=(title,singer,imgurl,url,alpha) 

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

n=cursor.execute(sql,param) 

#再來執行乙個查詢的操作 

cursor.execute("select * from cdinfo") 

#我們使用了fetchall這個方法.這樣,cds裡儲存的將會是查詢返回的全部結果.每條結果都是乙個tuple型別的資料,這些tuple組成了乙個tuple 

cds=cursor.fetchall() 

#因為是tuple,所以可以這樣使用結果集 

print cds[0][3] 

#或者直接顯示出來,看看結果集的真實樣子 

print cds 

#如果需要批量的插入資料,就這樣做

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

#每個值的集合為乙個tuple,整個引數集組成乙個tuple,或者list 

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

#使用executemany方法來批量的插入資料.這真是乙個很酷的方法! 

n=cursor.executemany(sql,param) 

需要分別的關閉指標物件和連線物件.他們有名字相同的方法 

cursor.close() 

conn.close() 

四步完成,基本的資料庫操作就是這樣了.下面是兩個有用的連線 

mysqldb使用者指南: 

mysqldb文件: 

測試程式

#! /usr/bin/env python

#coding=utf-8

import mysqldb

import random

import sys

import string

try:

conn = mysqldb.connect(host='127.0.0.1',

user='root',passwd='****')

except exception,e:

print e

sys.exit()

cur = conn.cursor()

#sql = 'drop database test1'

#cur.execute(sql)

sql = 'create database if not exists test1'

cur.execute(sql)

conn.query('use test1')

cur = conn.cursor()

sql = 'create table if not exists tbi(id int(4) primary key,\

name varchar(128),age int(4))'

cur.execute(sql)

def getname(x):

em = ''

for j in range(x):

em += random.choice(string.lowercase)

return em

data = [(random.randrange(1000,9999),getname(random.randrange(4,7)).capitalize(),

random.randrange(18,40)) for i in range(10)]

try:

for item in data:

sql = "insert into tbi values(%d,'%s',%d)"%(item[0],item[1],item[2])

cur.execute(sql)

conn.commit()

except exception,e:

print e

sql = 'select * from tbi'

cur.execute(sql)

alldata = cur.fetchall()

if alldata:

print("%-10s %-10s %-10s"%('id','name','age'))

for rec in alldata:

print("%-10d %-10s %-10d"%(rec[0],rec[1],rec[2]))

cur.close()

conn.close()

執行結果:

id         name       age       

1164 etlk 24

1467 bsbz 22

1574 ekjrw 18

2039 ghkw 34

3538 wbwsb 29

3811 pcjeef 34

3877 auho 18

5562 udjxxh 24

8625 pntpwm 20

9887 tyba 38

ref:

1,

2,

python MysqlDb模組使用

python呼叫mysql資料庫通常通過mysqldb模組,簡單說下如何呼叫 1.安裝驅動 目前有兩個mysql的驅動,我們可以選擇其中乙個進行安裝 1.mysql python 是封裝了mysql c驅動的python驅動 2.mysql connector python 是mysql官方的純py...

python MySQLdb學習筆記

mysqldb庫是python訪問mysql的連線庫,最近專案中需要使用,將學習使用所得整理如下。mysqldb windows下執行需要 libmysql.dll libmmd.dll 和 libguide40.dll 可以放在sitepackage下也可以在windows system32 學習...

python MySQLdb連線mysql失敗問題

mysql exceptions.operationalerror 2002,can t connect to local mysql 在很多種情況下,如果配置檔案沒有出錯的話,將機器重啟,確認關閉防火牆,確定啟動了mysql即可。網上很不錯講解 最近了解了一下django,資料庫選用了mysql,...