欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python中MySQLdb模塊用法實例

系統 1803 0

本文實例講述了python中MySQLdb模塊用法。分享給大家供大家參考。具體用法分析如下:

MySQLdb其實有點像php或asp中連接數據庫的一個模式了,只是MySQLdb是針對mysql連接了接口,我們可以在python中連接MySQLdb來實現數據的各種操作。

python連接mysql的方案有oursql、PyMySQL、 myconnpy、MySQL Connector 等,不過本篇要說的確是另外一個類庫MySQLdb,MySQLdb 是用于Python鏈接Mysql數據庫的接口,它實現了 Python 數據庫 API 規范 V2.0,基于 MySQL C API 上建立的。可以從:https://pypi.python.org/pypi/MySQL-python 進行獲取和安裝,而且很多發行版的linux源里都有該模塊,可以直接通過源安裝。

一、數據庫連接

MySQLdb提供了connect方法用來和數據庫建立連接,接收數個參數,返回連接對象:

復制代碼 代碼如下:
conn=MySQLdb.connect(host="localhost",user="root",passwd="jb51",db="test",charset="utf8")

比較常用的參數包括:
host:數據庫主機名.默認是用本地主機
user:數據庫登陸名.默認是當前用戶
passwd:數據庫登陸的秘密.默認為空
db:要使用的數據庫名.沒有默認值
port:MySQL服務使用的TCP端口.默認是3306
charset:數據庫編碼
更多關于參數的信息可以查這里 http://mysql-python.sourceforge.net/MySQLdb.html

然后,這個連接對象也提供了對事務操作的支持,標準的方法:
commit() 提交
rollback() 回滾

看一個簡單的查詢示例如下:

復制代碼 代碼如下:
#!/usr/bin/python
# encoding: utf-8
import MySQLdb
# 打開數據庫連接
db = MySQLdb.connect("localhost","root","361way","test" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# 使用execute方法執行SQL語句
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法獲取一條數據庫。
data = cursor.fetchone()
print "Database version : %s " % data
# 關閉數據庫連接
db.close()

腳本執行結果如下:
Database version : 5.5.40

二、cursor方法執行與返回值

cursor方法提供兩類操作:1.執行命令,2.接收返回值 。
cursor用來執行命令的方法

復制代碼 代碼如下:
//用來執行存儲過程,接收的參數為存儲過程名和參數列表,返回值為受影響的行數
callproc(self, procname, args)
//執行單條sql語句,接收的參數為sql語句本身和使用的參數列表,返回值為受影響的行數
execute(self, query, args)
//執行單挑sql語句,但是重復執行參數列表里的參數,返回值為受影響的行數
executemany(self, query, args)
//移動到下一個結果集
nextset(self)
cursor用來接收返回值的方法
//接收全部的返回結果行.
fetchall(self)
//接收size條返回結果行.如果size的值大于返回的結果行的數量,則會返回cursor.arraysize條數據
fetchmany(self, size=None)
//返回一條結果行
fetchone(self)
//移動指針到某一行.如果mode='relative',則表示從當前所在行移動value條,如果mode='absolute',則表示從結果集的第一行移動value條
scroll(self, value, mode='relative')
//這是一個只讀屬性,并返回執行execute()方法后影響的行數
rowcount

三、數據庫操作

1、創建database tables
如果數據庫連接存在我們可以使用execute()方法來為數據庫創建表,如下所示創建表EMPLOYEE:

復制代碼 代碼如下:
#!/usr/bin/python
# encoding: utf-8
import MySQLdb
# 打開數據庫連接
db = MySQLdb.connect("localhost","root","361way","test" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# 如果數據表已經存在使用 execute() 方法刪除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 創建數據表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)
# 關閉數據庫連接
db.close()

2、數據庫插入操作
復制代碼 代碼如下:
#!/usr/bin/python
# encoding: utf-8
import MySQLdb
# 打開數據庫連接
db = MySQLdb.connect("localhost","root","361way","test" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# SQL 插入語句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
???????? LAST_NAME, AGE, SEX, INCOME)
???????? VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
?? # 執行sql語句
?? cursor.execute(sql)
?? # 提交到數據庫執行
?? db.commit()
except:
?? # Rollback in case there is any error
?? db.rollback()
# 關閉數據庫連接
db.close()

這里是一個單sql 執行的示例,cursor.executemany的用法感興趣的讀者可以參看相關的aws主機資產管理系統示例。
上例也可以寫成通過占位符傳參的方式進行執行,如下:
復制代碼 代碼如下:
#!/usr/bin/python
# encoding: utf-8
import MySQLdb
# 打開數據庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法獲取操作游標
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:
?? # 執行sql語句
?? cursor.execute(sql)
?? # 提交到數據庫執行
?? db.commit()
except:
?? # 發生錯誤時回滾
?? db.rollback()
# 關閉數據庫連接
db.close()

也可以以變量的方式傳遞參數,如下:
復制代碼 代碼如下:
..................................
user_id = "test"
password = "password123"
con.execute('insert into Login values("%s", "%s")' % \
???????????? (user_id, password))
..................................

3、數據庫查詢操作
以查詢EMPLOYEE表中salary(工資)字段大于1000的所有數據為例:
復制代碼 代碼如下:
#!/usr/bin/python
# encoding: utf-8
import MySQLdb
# 打開數據庫連接
db = MySQLdb.connect("localhost","root","361way","test" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# SQL 查詢語句
sql = "SELECT * FROM EMPLOYEE \
?????? WHERE INCOME > '%d'" % (1000)
try:
?? # 執行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]
????? # 打印結果
????? print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
???????????? (fname, lname, age, sex, income )
except:
?? print "Error: unable to fecth data"
# 關閉數據庫連接
db.close()

以上腳本執行結果如下:
fname=Mac, lname=Mohan, age=20, sex=M, income=2000

4、數據庫更新操作
更新操作用于更新數據表的的數據,以下實例將 test表中的 SEX 字段全部修改為 'M',AGE 字段遞增1:

復制代碼 代碼如下:
# encoding: utf-8
#!/usr/bin/python
import MySQLdb
# 打開數據庫連接
db = MySQLdb.connect("localhost","root","361way","test" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# SQL 更新語句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
????????????????????????? WHERE SEX = '%c'" % ('M')
try:
?? # 執行SQL語句
?? cursor.execute(sql)
?? # 提交到數據庫執行
?? db.commit()
except:
?? # 發生錯誤時回滾
?? db.rollback()
# 關閉數據庫連接
db.close()

5、執行事務

事務機制可以確保數據一致性。
事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。
① 原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要么都做,要么都不做。
② 一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
③ 隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對并發的其他事務是隔離的,并發執行的各個事務之間不能互相干擾。
④ 持久性(durability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。

Python DB API 2.0 的事務提供了兩個方法 commit 或 rollback。實例:

復制代碼 代碼如下:
# SQL刪除記錄語句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
?? # 執行SQL語句
?? cursor.execute(sql)
?? # 向數據庫提交
?? db.commit()
except:
?? # 發生錯誤時回滾
?? db.rollback()

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

希望本文所述對大家的Python程序設計有所幫助。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 视频一区二区不卡 | 中文字幕日本电影 | 天堂国产 | 三A级做爰片免费观看国产电影 | 斗罗破苍穹在线观看免费完整观看 | 国产免费播放一区二区 | 精品国偷自产在线 | 久久国产精品一区 | 五月天国产视频 | 日韩不卡一区 | 久久久久性视频 | 天天碰天天| 亚洲国产女人aaa毛片在线 | 国产在线永久免费 | 奇米第四狠狠777高清秒播 | 亚洲国产综合网 | 99热在线精品观看 | 国产小视频免费在线观看 | 夜夜骚| 久草黄视频 | 小明www永久在线看 国产美女一区二区三区 | 国产精品99久久久久久久女警 | 波多久久亚洲精品AV无码 | 日本一本视频 | 亚洲黄色在线视频 | 北岛玲亚洲一区在线观看 | 亚洲综合区 | 欧洲a老妇女黄大片 | 欧美福利视频在线观看 | 99影视在线视频免费观看 | 久久久久亚洲 | 久草热在线视频 | 狠狠干91| 免费看的久久久久 | 日韩h视频 | 一区二区三区在线免费观看 | 香蕉久久久久久 | 毛片久久 | 成年免费视频网站入口 | 成人亚洲精品 | 一本色道久久88综合亚洲精品高清 |