安裝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