Python MySQLdb模塊

Python MySQLdb模塊

安裝

系統:Ubuntu 14.04
MySQLdb
$ pip install Mysql-python
-> 報錯:EnvironmentError: mysql_config not found (安裝libmysqlclient-dev)
$ apt-get install libmysqlclient-dev
$ pip install Mysql-python

若是是MAC系統,則須要先安裝 mysql 服務。

使用

  • 查數據示例(fetchall()獲取數據
import MySQLdb

# 創建鏈接
conn = MySQLdb.connect(host='127.0.0.1', user='sate', db='dbtest', passwd='password')

# 設置遊標
cur = conn.cursor()

# 執行SQL命令,並不會直接返回查詢結果,而是返回SQL語句影響的行數
reCount = cur.execute('select * from Products;')
print reCount        # 輸出一個數字,是SQL影響的行數

# 使用 fetchall()方法獲取數據,循環輸出結果,以元祖的方式輸出
for data in cur.fetchall():
    print data
    
# 關閉鏈接
cur.close()
conn.close()
# 結果==》
5
('00001', 'hilife')
('00002', 'GTL')
('00003', 'GLA')
('000004', 'TYA')
('000005', 'TUH')
  • 插入或者更改數據
import MySQLdb

conn = MySQLdb.connect(host='127.0.0.1', user='sate', db='dbtest', passwd='password')
cur = conn.cursor()

# 定義SQL語句
sql = 'insert into Products(prod_id, prod_name) values(%s, %s);'
# 定義數據
params = ('00002', 'GLA')
reCount = cur.execute(sql, params)        #爲了防止SQL注入,能夠使用該方法
conn.commit()   #提交

cur.close()
conn.close()
  • 批量插入數據
import MySQLdb

conn = MySQLdb.connect(host='127.0.0.1', user='sate', db='dbtest', passwd='password')
cur = conn.cursor()

# 要批量插入的數據
li = [
    ('000004', 'TYA'),
    ('000005', 'TUH')
]
sql = 'insert into Products(prod_id, prod_name) values(%s, %s);'
# 批量使用executemany
reCount = cur.executemany(sql, li)        #爲了防止SQL注入,能夠使用該方法
conn.commit()   #提交

cur.close()
conn.close()
  • 以前查看數據時,返回是元祖形式,有時看起來並不明顯,咱們能夠選擇用字典的方式,將列名一塊兒輸出。
import MySQLdb

conn = MySQLdb.connect(host='127.0.0.1', user='zheng', db='satezheng', passwd='satezheng')

# 使用字典形式返回數據
cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)

# 執行命令,並不會直接打印,能夠使用fetchall來讀取。
reCount1 = cur.execute('select * from Products')

print reCount1        # 輸出一個數字,是SQL影響的行數
for data in cur.fetchall():
    print data
cur.close()
conn.close()
# 結果==》
5
{'prod_name': 'hilife', 'prod_id': '00001'}
{'prod_name': 'GLA', 'prod_id': '00002'}
{'prod_name': 'GTL', 'prod_id': '00003'}
{'prod_name': 'TYA', 'prod_id': '000004'}
{'prod_name': 'TUH', 'prod_id': '000005'}

cursor讀取執行結果的方法有:python

  • fetchall() 把全部的都讀出來
  • fetchmany(n) 輸出指定數量n的行
  • fetchone() 只返回第一條結果
  • fetchone() 一次只返回一條結果,下次返回第二條,和文件的readlines相似

對應的也會有指針的概念,scroll()能夠指定讀取的位置mysql

cur.scroll(0, mode='absolute')    # 絕對指針, 0 就是指針的位置
cur.scroll(-1, mode='relative')    # 相對指針, -1 指針位置向前移一位(指針位置-1)
import MySQLdb

conn = MySQLdb.connect(host='127.0.0.1', user='zheng', db='satezheng', passwd='satezheng')
cur = conn.cursor()

reCount = cur.execute('select * from Products;')

# 使用 fetchone()方法獲取數據
data = cur.fetchone()
print data
data = cur.fetchone()
print data
data = cur.fetchone()
print data
# 結果==》
('00001', 'hilife')
('00002', 'GTL')
('00003', 'GLA')

# 使用絕對指針時
...
data = cur.fetchone()
print data
data = cur.fetchone()
print data
cur.scroll(0, mode='absolute')    # 將指針指向 0
data = cur.fetchone()
print data
# 結果==》
('00001', 'hilife')
('00002', 'GTL')
('00001', 'hilife')

# 使用相對指針
data = cur.fetchone()
print data
data = cur.fetchone()
print data
cur.scroll(-1, mode='relative')    # 指針位置減1
data = cur.fetchone()
print data
# 結果==》
('00001', 'hilife')
('00002', 'GTL')
('00002', 'GTL')
  • cur.lastrawid() 獲取自增id
相關文章
相關標籤/搜索