Python-MySQLdb

準備工做

首先要新建一個數據庫python和一張數據表userpython

$ mysql -u root -p 
> create database python;

> use database python;

> create table user(
username varchar(32),
password varchar(32)
);

鏈接到數據庫

In [1]: import MySQLdb

# 獲取connection
In [2]: conn = MySQLdb.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
passwd ='root',
db = 'python',
charset = 'utf8'
)

# 獲取到cusor,全部的操做都要經過cursor進行
In [3]: cursor = conn.cursor()

插入操做

In [4]: sql = "insert into user (username, password) values(%s, %s)"

# 這裏咱們將要插入的數據存入一個tuple當中
In [5]: cursor.execute(sql, ('zxy', '123')
Out[5]: 1L

由於這裏是要插入數據,因此要commit,可是我不進行commit好像也沒有問題。我查閱到的資料的解釋是,當curosr.execute()執行成功的時候,執行conn.commit(),可是執行失敗的時候,就執行conn.roolback(),跟hibernate同樣,應該也是進行事務的回滾。還有一點,有的教程說應該設置conn.autocommit(False)來關閉自動提交事務,這應該也就是我不要commit的緣由了吧。insert/update/delete這種更改數據庫的方式都要進行commit,可是select這類查詢操做就沒有必要了,由於select不會更改到數據庫。mysql

In [6]: conn.commit()

# 我這裏省去了commit,好像也行
In [7]: cursor.execute(sql, ('yd', '456'))
Out[7]: 1L

查詢操做

In [8]: sql = "select * from user"

In [9]: cursor.execute(sql)
Out[9]: 2L

# fetchall是獲得全部的結果,你以能夠使用fetchone()來只查詢一條數據,或者fetchmany(size=n)來指定查詢的條數
In [10]: result = cursor.fetchall()           

In [11]: cursor.fetchall()
Out[11]: ((u'zxy', u'123'), (u'yd', u'456'))

# 還能夠打印出查詢到的條數以用來優雅的遍歷
In [12]: print(cursor.rowcount)
2

# 最後記得關閉conn和cursor
In [13]: cursor.close()

In [14]: conn.close()
相關文章
相關標籤/搜索