python操作數據庫

安裝MySQLdb

首先安裝 setuptools,下載源代碼包:

[root@python ~]# wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz --no-check-certificate
[root@python ~]# tar xf setuptools-0.6c11.tar.gz 
[root@python ~]# cd setuptools-0.6c11
[root@python setuptools-0.6c11]# python setup.py build
[root@python setuptools-0.6c11]# python setup.py install

安裝一些擴展庫

[root@python ~]# yum -y install rpm-build gcc-c++ mysql-devel python-devel

安裝MySQL-python

#下載源碼包
[root@python ~]# wget http://downloads.sourceforge.net/project/mysql-python/mysql-python-test/1.2.4b4/MySQL-python-1.2.4b4.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fmysql-python%2F&ts=1364895531&use_mirror=nchc
[root@python ~]# tar xf MySQL-python-1.2.4b4.tar.gz 
[root@python ~]# cd MySQL-python-1.2.4b4
[root@python MySQL-python-1.2.3]# python setup.py build 
[root@python MySQL-python-1.2.3]# python setup.py install

#測試
In [1]: import MySQLdb

實例:

以下實例鏈接Mysql的test數據庫:

[root@python day5]# cat conn_mysql.py 
#!/usr/bin/env python

import MySQLdb

# 打開數據庫連接
db = MySQLdb.connect('127.0.0.1','root','lyao36843','mysql')

# 使用cursor()方法獲取操作遊標 
cursor = db.cursor()

# 使用execute方法執行SQL語句
cursor.execute("select user,host,password from user")

# 使用 fetchall() 方法獲取一條數據庫。
data = cursor.fetchall()

#通過for循環打印結果
for line in data:
	print line

# 關閉數據庫連接
db.close()

執行以上腳本輸出結果如下:

[root@python day5]# python conn_mysql.py 
('root', 'localhost', '*B181A5BCA7C882221F5B8F6F9657AE71FF67EDDB')
('root', '127.0.0.1', '*B181A5BCA7C882221F5B8F6F9657AE71FF67EDDB')

創建數據庫表

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

[root@python day5]# cat conn_mysql2.py 
#!/usr/bin/env python
import MySQLdb

# 打開數據庫連接
db = MySQLdb.connect('127.0.0.1','root','lyao36843','test')

# 使用cursor()方法獲取操作遊標 
cursor = db.cursor()

# 如果數據表已經存在使用 execute() 方法刪除表。
cursor.execute("drop tables 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()

#查詢結果
mysql> select database();
+------------+
| database() |
+------------+
| test       |
+------------+
1 row in set (0.00 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| EMPLOYEE       |
+----------------+
1 row in set (0.00 sec)

mysql> desc EMPLOYEE;
+------------+----------+------+-----+---------+-------+
| Field      | Type     | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| FIRST_NAME | char(20) | NO   |     | NULL    |       |
| LAST_NAME  | char(20) | YES  |     | NULL    |       |
| AGE        | int(11)  | YES  |     | NULL    |       |
| SEX        | char(1)  | YES  |     | NULL    |       |
| INCOME     | float    | YES  |     | NULL    |       |
+------------+----------+------+-----+---------+-------+
5 rows in set (0.00 sec)

數據庫插入操作

以下實例使用執行 SQL INSERT 語句向表 EMPLOYEE 插入記錄:

[root@python day5]# cat conn_mysql3.py 
#!/usr/bin/env python
import MySQLdb

# 打開數據庫連接
db = MySQLdb.connect('127.0.0.1','root','lyao36843','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)
	# 提交到數據庫執行,不執行commit,所有操作都是保存再內存中
	db.commit()
except:
	#Rollback in case there is any error
	# 發生錯誤時回滾
	db.rooback()
# 關閉數據庫連接
db.close()

#查詢執行結果
mysql> select * from EMPLOYEE;
+------------+-----------+------+------+--------+
| FIRST_NAME | LAST_NAME | AGE  | SEX  | INCOME |
+------------+-----------+------+------+--------+
| Mac        | Mohan     |   20 | M    |   2000 |
+------------+-----------+------+------+--------+
1 row in set (0.00 sec)

數據庫查詢操作

Python查詢Mysql使用 fetchone() 方法獲取單條數據, 使用fetchall() 方法獲取多條數據。

fetchone(): 該方法獲取下一個查詢結果集。結果集是一個對象

fetchall():接收全部的返回結果行.

rowcount: 這是一個只讀屬性,並返回執行execute()方法後影響的行數。

實例:

查詢EMPLOYEE表中salary(工資)字段大於1000的所有數據:

[root@python day5]# cat conn_mysql4.py 
#!/usr/bin/env python
import MySQLdb

# 打開數據庫連接
db = MySQLdb.connect('127.0.0.1','root','lyao36843','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()

#執行結果
[root@python day5]# python conn_mysql4.py 
fname=Mac,lname=Mohan,age=20,sex=M,income=2000

數據庫更新操作

更新操作用於更新數據表的的數據,以下實例將 TESTDB表中的 SEX 字段全部修改爲 'M',AGE 字段遞增1:

#更新前的結果
[root@python day5]# python conn_mysql4.py 
fname=Mac,lname=Mohan,age=21,sex=M,income=2000

#更細腳本如下
[root@python day5]# cat conn_mysql5.py 
#!/usr/bin/env python
import MySQLdb

# 打開數據庫連接
db = MySQLdb.connect('127.0.0.1','root','lyao36843','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()

#執行後結果
[root@python day5]# python conn_mysql4.py 
fname=Mac,lname=Mohan,age=21,sex=M,income=2000


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