日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

python mysqldb cursor_python中MySQLdb模块用法实例

發(fā)布時(shí)間:2025/6/17 数据库 117 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python mysqldb cursor_python中MySQLdb模块用法实例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自:http://www.jb51.net/article/57290.htm

姓名:梅金波? ? ? ? ? ? ? ? ? ? ? ? 學(xué)號:16010110036

【嵌牛導(dǎo)讀】MySQLdb其實(shí)有點(diǎn)像php或asp中連接數(shù)據(jù)庫的一個(gè)模式了,只是MySQLdb是針對mysql連接了接口,我們可以在python中連接MySQLdb來實(shí)現(xiàn)數(shù)據(jù)的各種操作。

【嵌牛鼻子】MySQLdb模塊的用法實(shí)例。

【嵌牛提問】python中的MySQLdb模塊如何使用?

【嵌牛正文】python連接mysql的方案有oursql、PyMySQL、 myconnpy、MySQL Connector 等,不過本篇要說的確是另外一個(gè)類庫MySQLdb,MySQLdb 是用于Python鏈接Mysql數(shù)據(jù)庫的接口,它實(shí)現(xiàn)了 Python 數(shù)據(jù)庫 API 規(guī)范 V2.0,基于 MySQL C API 上建立的。可以從:https://pypi.python.org/pypi/MySQL-python 進(jìn)行獲取和安裝,而且很多發(fā)行版的linux源里都有該模塊,可以直接通過源安裝。

一、數(shù)據(jù)庫連接

MySQLdb提供了connect方法用來和數(shù)據(jù)庫建立連接,接收數(shù)個(gè)參數(shù),返回連接對象:

conn=MySQLdb.connect(host="localhost",user="root",passwd="jb51",db="test",charset="utf8")

比較常用的參數(shù)包括:

host:數(shù)據(jù)庫主機(jī)名.默認(rèn)是用本地主機(jī)

user:數(shù)據(jù)庫登陸名.默認(rèn)是當(dāng)前用戶

passwd:數(shù)據(jù)庫登陸的秘密.默認(rèn)為空

db:要使用的數(shù)據(jù)庫名.沒有默認(rèn)值

port:MySQL服務(wù)使用的TCP端口.默認(rèn)是3306

charset:數(shù)據(jù)庫編碼

更多關(guān)于參數(shù)的信息可以查這里 http://mysql-python.sourceforge.net/MySQLdb.html

然后,這個(gè)連接對象也提供了對事務(wù)操作的支持,標(biāo)準(zhǔn)的方法:

commit() 提交

rollback() 回滾

看一個(gè)簡單的查詢示例如下:

#!/usr/bin/python

# encoding: utf-8

import MySQLdb

# 打開數(shù)據(jù)庫連接

db = MySQLdb.connect("localhost","root","361way","test" )

# 使用cursor()方法獲取操作游標(biāo)

cursor = db.cursor()

# 使用execute方法執(zhí)行SQL語句

cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法獲取一條數(shù)據(jù)庫。

data = cursor.fetchone()print "Database version : %s " % data

# 關(guān)閉數(shù)據(jù)庫連接

db.close()

腳本執(zhí)行結(jié)果如下:Database version : 5.5.40

二、cursor方法執(zhí)行與返回值

cursor方法提供兩類操作:1.執(zhí)行命令,2.接收返回值 。

1.cursor用來執(zhí)行命令的方法

//用來執(zhí)行存儲過程,接收的參數(shù)為存儲過程名和參數(shù)列表,返回值為受影響的行數(shù)

callproc(self, procname, args)

//執(zhí)行單條sql語句,接收的參數(shù)為sql語句本身和使用的參數(shù)列表,返回值為受影響的行數(shù)

execute(self, query, args)

//執(zhí)行單挑sql語句,但是重復(fù)執(zhí)行參數(shù)列表里的參數(shù),返回值為受影響的行數(shù)

executemany(self, query, args)

//移動到下一個(gè)結(jié)果集

nextset(self)

2.cursor用來接收返回值的方法

//接收全部的返回結(jié)果行.

fetchall(self)

//接收size條返回結(jié)果行.如果size的值大于返回的結(jié)果行的數(shù)量,則會返回cursor.arraysize條數(shù)據(jù)

fetchmany(self, size=None)

//返回一條結(jié)果行

fetchone(self)

//移動指針到某一行.如果mode=’relative’,則表示從當(dāng)前所在行移動value條,如果mode=’absolute’,則表示從結(jié)果集的第一行移動value條

scroll(self, value, mode=’relative’)

//這是一個(gè)只讀屬性,并返回執(zhí)行execute()方法后影響的行數(shù)

rowcount

三、數(shù)據(jù)庫操作

1、創(chuàng)建database tables

如果數(shù)據(jù)庫連接存在我們可以使用execute()方法來為數(shù)據(jù)庫創(chuàng)建表,如下所示創(chuàng)建表EMPLOYEE:

#!/usr/bin/python

# encoding: utf-8

import MySQLdb

# 打開數(shù)據(jù)庫連接

db = MySQLdb.connect("localhost","root","361way","test" )

# 使用cursor()方法獲取操作游標(biāo)

cursor = db.cursor()

# 如果數(shù)據(jù)表已經(jīng)存在使用 execute() 方法刪除表。

cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 創(chuàng)建數(shù)據(jù)表SQL語句

sql = """CREATE TABLE EMPLOYEE (

FIRST_NAME? CHAR(20) NOT NULL,

LAST_NAME? CHAR(20),

AGE INT,

SEX CHAR(1),

INCOME FLOAT )"""

cursor.execute(sql)

# 關(guān)閉數(shù)據(jù)庫連接

db.close()

2、數(shù)據(jù)庫插入操作

#!/usr/bin/python

# encoding: utf-8

import MySQLdb

# 打開數(shù)據(jù)庫連接

db = MySQLdb.connect("localhost","root","361way","test" )

# 使用cursor()方法獲取操作游標(biāo)

cursor = db.cursor()

# SQL 插入語句

sql = """INSERT INTO EMPLOYEE(FIRST_NAME,

LAST_NAME, AGE, SEX, INCOME)

VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""

try:

# 執(zhí)行sql語句

cursor.execute(sql)

# 提交到數(shù)據(jù)庫執(zhí)行

db.commit()

except:

# Rollback in case there is any error

db.rollback()

# 關(guān)閉數(shù)據(jù)庫連接

db.close()

這里是一個(gè)單sql 執(zhí)行的示例,cursor.executemany的用法感興趣的讀者可以參看相關(guān)的aws主機(jī)資產(chǎn)管理系統(tǒng)示例。

上例也可以寫成通過占位符傳參的方式進(jìn)行執(zhí)行,如下:

#!/usr/bin/python

# encoding: utf-8

import MySQLdb

# 打開數(shù)據(jù)庫連接

db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法獲取操作游標(biāo)

cursor = db.cursor()

# SQL 插入語句

sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \

LAST_NAME, AGE, SEX, INCOME) \

VALUES ('%s', '%s', '%d', '%c', '%d' )" % \

('Mac', 'Mohan', 20, 'M', 2000)

try:

# 執(zhí)行sql語句

cursor.execute(sql)

# 提交到數(shù)據(jù)庫執(zhí)行

db.commit()

except:

# 發(fā)生錯(cuò)誤時(shí)回滾

db.rollback()

# 關(guān)閉數(shù)據(jù)庫連接

db.close()

也可以以變量的方式傳遞參數(shù),如下:

user_id = "test"

password = "password123"

con.execute('insert into Login values("%s", "%s")' % \

(user_id, password))

3、數(shù)據(jù)庫查詢操作

以查詢EMPLOYEE表中salary(工資)字段大于1000的所有數(shù)據(jù)為例:

#!/usr/bin/python

# encoding: utf-8

import MySQLdb

# 打開數(shù)據(jù)庫連接

db = MySQLdb.connect("localhost","root","361way","test" )# 使用cursor()方法獲取操作游標(biāo)cursor = db.cursor()# SQL 查詢語句sql = "SELECT * FROM EMPLOYEE \

WHERE INCOME > '%d'" % (1000)

try:

# 執(zhí)行SQL語句

cursor.execute(sql)

# 獲取所有記錄列表

results = cursor.fetchall()

for row in results:

fname = row[0]

lname = row[1]

age = row[2]

sex = row[3]

income = row[4]

# 打印結(jié)果

print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \

(fname, lname, age, sex, income )

except:

print "Error: unable to fecth data"

# 關(guān)閉數(shù)據(jù)庫連接

db.close()

以上腳本執(zhí)行結(jié)果如下:

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

4、數(shù)據(jù)庫更新操作

更新操作用于更新數(shù)據(jù)表的的數(shù)據(jù),以下實(shí)例將 test表中的 SEX 字段全部修改為 ‘M’,AGE 字段遞增1:

# encoding: utf-8

#!/usr/bin/python

import MySQLdb

# 打開數(shù)據(jù)庫連接

db = MySQLdb.connect("localhost","root","361way","test" )

# 使用cursor()方法獲取操作游標(biāo)

cursor = db.cursor()

# SQL 更新語句

sql = "UPDATE EMPLOYEE SET AGE = AGE + 1? WHERE SEX = '%c'" % ('M')

try:

# 執(zhí)行SQL語句

cursor.execute(sql)? # 提交到數(shù)據(jù)庫執(zhí)行

db.commit()

except:

# 發(fā)生錯(cuò)誤時(shí)回滾

db.rollback()

# 關(guān)閉數(shù)據(jù)庫連接

db.close()

5、執(zhí)行事務(wù)

事務(wù)機(jī)制可以確保數(shù)據(jù)一致性。

事務(wù)應(yīng)該具有4個(gè)屬性:原子性、一致性、隔離性、持久性。這四個(gè)屬性通常稱為ACID特性。

① 原子性(atomicity)。一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)中包括的諸操作要么都做,要么都不做。

② 一致性(consistency)。事務(wù)必須是使數(shù)據(jù)庫從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。一致性與原子性是密切相關(guān)的。

③ 隔離性(isolation)。一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對并發(fā)的其他事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾。

④ 持久性(durability)。持續(xù)性也稱永久性(permanence),指一個(gè)事務(wù)一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來的其他操作或故障不應(yīng)該對其有任何影響。

Python DB API 2.0 的事務(wù)提供了兩個(gè)方法 commit 或 rollback。實(shí)例:

# SQL刪除記錄語句

sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)

try:

# 執(zhí)行SQL語句

cursor.execute(sql)

# 向數(shù)據(jù)庫提交

db.commit()

except:

# 發(fā)生錯(cuò)誤時(shí)回滾

db.rollback()

對于支持事務(wù)的數(shù)據(jù)庫, 在Python數(shù)據(jù)庫編程中,當(dāng)游標(biāo)建立之時(shí),就自動開始了一個(gè)隱形的數(shù)據(jù)庫事務(wù)。commit()方法游標(biāo)的所有更新操作,rollback()方法回滾當(dāng)前游標(biāo)的所有操作。每一個(gè)方法都開始了一個(gè)新的事務(wù)。

希望本文所述對大家的Python程序設(shè)計(jì)有所幫助。

總結(jié)

以上是生活随笔為你收集整理的python mysqldb cursor_python中MySQLdb模块用法实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。