MySQLdb爲Python提供了MySQL支持,它符合Python DB API版本2.0的要求,可在http://sourceforge.net/projects/mysql-python/上找到它。
用戶手冊參考地址:http://mysql-python.sourceforge.net/MySQLdb.html
api參考地址:http://mysql-python.sourceforge.net/MySQLdb-1.2.2/
2 測試環境準備
操作系統:Red Hat Enterprise Linux Server release 6.4
mysql版本:mysql-5.5.28
查看是否安裝MySQL-python
[root@VLAN23-RHEL64-BOC-HA1 ~]# rpm -qa|grep MySQL-python
MySQL-python-1.2.3-0.3.c1.1.el6.x86_64
已安裝無需理會,未安裝的話運行如下安裝命令yum install MySQL-python
3 編程實例#!/usr/bin/env python
#encoding=utf8
import MySQLdb
conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='jesse', port=3355, charset='utf8')
cursor = conn.cursor()
cursor.execute("drop database if exists tmpdb")
cursor.execute("create database tmpdb")
conn.select_db("tmpdb")
cursor.execute("create table tmptab(c1 int, c2 varchar(20), c3 varchar(20))")
cursor.execute("insert into tmptab values(101, '姓名1', 'address1'), (102, '姓名2', 'address2'), (103, '姓名3', 'address3'), (104, '姓名4', 'address4')")
conn.commit();#執行commit後數據才能入庫並可見
cursor.execute("select * from tmptab")
print "--增加數據測試--"
result = cursor.fetchall()
print type(result)
for column in result:
print column[0], column[1], column[2]
#print columni #打印全部結果集(中文輸出爲指針,暫不用此方法)
cursor.execute("delete from tmptab where c1 = 101")
cursor.execute("select * from tmptab")
print "--刪除數據測試--"
for column in result:
print column[0], column[1], column[2]
cursor.execute("update tmptab set c3 = 'address4' where c1 = 103")
cursor.execute("select * from tmptab")
print "--更新數據測試--"
result = cursor.fetchall()
for column in result:
print column[0], column[1], column[2]
cursor.execute("delete from tmptab")
cursor.execute("select * from tmptab")
print "--清空數據測試--"
result = cursor.fetchall()
for column in result:
print column[0], column[1], column[2]
cursor.execute("drop table tmptab")
cursor.execute("drop database tmpdb")
cursor.close() #關閉指針
conn.close() #關閉連接
默認mysqldb結果集返回的是元組,這樣對使用者不太友好,也不利於維護4 運行腳本
[root@localhost /]# python MysqlPythonTest.py
5.1 python對mysql的查詢操作
fetchone(): 接收結果集的一行
fetchmany(num): 接收結果集返回的num行,如果num>=結果集的所有行,則同fetchall()
fetchall():接收結果集全部的返回行.
5.2 python對mysql的寫入操作
sql語句的入庫操作執行後還需要執行conn.commit();纔可提交。
事務機制可以確保數據一致性。
事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱爲ACID特性。
原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。
一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對併發的其他事務是隔離的,併發執行的各個事務之間不能互相干擾。
持久性(durability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。
Python DB API 2.0 的事務提供了兩個方法 commit 或 rollback
6.1 語言縮進
Python語言是一款對縮進非常敏感的語言,給很多初學者帶來了困惑,即便是很有經驗的Python程序員,也可能陷入陷阱當中。最常見的情況是tab和空格的混用會導致錯誤,或者縮進不對,而這是用肉眼無法分別的。
在編譯時會出現這樣的錯IndentationError:expected an indented block說明此處需要縮進,你只要在出現錯誤的那一行,按空格或Tab(但不能混用)鍵縮進就行。該縮進的地方就要縮進,不縮進反而會出錯,,比如:
if xxxxxx:
(空格)xxxxx
或者
def xxxxxx:
(空格)xxxxx
還有
for xxxxxx:
(空格)xxxxx
有冒號的下一行往往要縮進
6.2 python與mysql中文亂碼
爲確保程序寫入數據庫以及從數據庫讀出時不出現亂碼,需要做如下配置:
python客戶端程序級別:
Python程序文件設置編碼 utf-8 (文件前面加上 #encoding=utf-8)
Python連接MySQL時加上參數 charset=utf8
設置Python的默認編碼爲 utf-8 (sys.setdefaultencoding(utf-8) (可選)
mysql數據庫級別:
設置MySQL數據庫客戶端及服務端配置爲utf8
例如:
在my.cnf配置文件中配置
[mysql]
default_character_set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_bin
****************************************************************************************
原文地址:http://blog.csdn.net/jesseyoung/article/details/40377737
博客主頁:http://blog.csdn.net/jesseyoung
****************************************************************************************