python操作mysql範例(增刪查改)

1 python連接mysql簡介
    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 補充知識

    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 一些注意事項

    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
****************************************************************************************

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章