一、实验规划 1、首先实验之前,我们需要提前创建一个数据库TESTDB,然后授一个用户test管理该数据库,这里我设置的密码是test123; 2、要用python链接数据库需要用到第三方法模块MySQLdb; 3、利用python脚本对数据库做一些简单操作; 二、安装第三方模块MySQLdb. 1、获取模块
wget https://pypi.python.org/packages/source/M/MySQL-python/MySQL-python-1.2.5.zip
2、解压,安装
unzip MySQL-python-1.2.5.zip
cd MySQL-python-1.2.5
python setup.py build
python setup.py install
3、检查安装情况,进入python命令行执行 import,如果不报出任何信息说明成功安装并且导入成功
demo@demo:~$ python
Python 2.7.9 (default, Apr 2 2015, 15:33:21)
[GCC 4.9.2] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
> import MySQLdb
三、对mysql数据库的一些操作 1、连接数据库TESTDB并查看数据库的版本
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import MySQLdb
db = MySQLdb.connect(“localhost”,”testuser”,”test123”,”TESTDB”)
cursor = db.cursor()
cursor.execute(“SELECT VERSION()”)
data = cursor.fetchone()
print “Database version: %s “ % data
db.close()
执行结果如下:
demo@demo:~/python_learn$ python mysql_connect.py
Database version: 5.6.25-0ubuntu0.15.04.1
demo@demo:~/python_learn$
2、链接到数据库TESTDB并且创建一个张表
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import MySQLdb
db = MySQLdb.connect(“localhost”,”testuser”,”test123”,”TESTDB”)
cursor = db.cursor()
cursor.execute(“DROP TABLE IF EXISTS EMPLOYEE”)
sql = “””CREATE TABLE `EMPLOYEE` (
`FIRST_NAME` varchar(20) DEFAULT NULL,
`LAST_NAME` varchar(20) DEFAULT NULL,
`AGE` int(11) DEFAULT NULL,
`SEX` varchar(20) DEFAULT NULL,
`INCOME` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 “””
cursor.execute(sql)
db.close()
执行结果我们通过链接到数据库去查看
mysql> use TESTDB;
Database changed
mysql> SHOW TABLES;
+——————+
| Tables_in_TESTDB |
+——————+
| EMPLOYEE |
+——————+
1 row in set (0.00 sec)
mysql>
mysql> DESC EMPLOYEE;
+————+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+————+————-+——+—–+———+——-+
| FIRST_NAME | varchar(20) | YES | | NULL | |
| LAST_NAME | varchar(20) | YES | | NULL | |
| AGE | int(11) | YES | | NULL | |
| SEX | varchar(20) | YES | | NULL | |
| INCOME | varchar(20) | YES | | NULL | |
+————+————-+——+—–+———+——-+
5 rows in set (0.00 sec)
mysql> select * from EMPLOYEE; #目前该表没有任何数据
Empty set (0.00 sec)
mysql>
3、连接到数据库,并在EMPLOYEE表中插入数据
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import MySQLdb
db = MySQLdb.connect(“localhost”,”testuser”,”test123”,”TESTDB”)
cursor = db.cursor()
sql = “””INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME,AGE,SEX,INCOME)
VALUES (‘Guo’,’Maoqiuo’,’24’,’M’,’1991’)”””
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
db.close()
执行结果如下
mysql> select * from EMPLOYEE;
+————+———–+——+——+——–+
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
+————+———–+——+——+——–+
| Guo | Maoqiuo | 24 | M | 1991 |
+————+———–+——+——+——–+
1 row in set (0.00 sec)
mysql>
4、链接数据库使用select语句进行查询,这里实验使用条件查询,那我需要多一点数据才行,那我修改上面的那个脚本然后多执行几遍即可,看到的结果如下
mysql> select * from EMPLOYEE;
+————+———–+——+——+——–+
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
+————+———–+——+——+——–+
| Guo | Maoqiuo | 24 | M | 1991 |
| Bruce | Li | 25 | M | 1989 |
| Fan | bingbing | 28 | F | 1988 |
| Jack | cheng | 45 | M | 1968 |
| joy | jiang | 26 | F | 1977 |
+————+———–+——+——+——–+
5 rows in set (0.00 sec)
使用条件查询
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import MySQLdb
db = MySQLdb.connect(“localhost”,”testuser”,”test123”,”TESTDB”)
cursor = db.cursor()
sql = “SELECT * FROM EMPLOYEE WHERE INCOME > ‘%d’” % (1988)
try:
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, Lanme=%s, Age=%d, Sex=%s, Income=%s\\n" % (fname,lname,age,sex,income)
except:
print “Error: unable to fecth data”
db.close()
执行结果如下
deamon@deamon:~/python_learn$ python mysql_select.py
Fname=Guo, Lanme=Maoqiuo, Age=24, Sex=M, Income=1991
Fname=Bruce, Lanme=Li, Age=25, Sex=M, Income=1989
4、连接到数据库,并更新在EMPLOYEE表的数据,将性别为M的人员在年龄上加2
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import MySQLdb
db = MySQLdb.connect(“localhost”,”testuser”,”test123”,”TESTDB”)
cursor = db.cursor()
sql = “UPDATE EMPLOYEE SET AGE = AGE +2 WHERE SEX = ‘%c’ “ % (‘M’)
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
print “Error”
db.close()
执行后的结果
mysql> select * from TESTDB.EMPLOYEE;
+————+———–+——+——+——–+
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
+————+———–+——+——+——–+
| Guo | Maoqiuo | 26 | M | 1991 |
| Bruce | Li | 27 | M | 1989 |
| Fan | bingbing | 28 | F | 1988 |
| Jack | cheng | 47 | M | 1968 |
| joy | jiang | 26 | F | 1977 |
+————+———–+——+——+——–+
5 rows in set (0.00 sec)
mysql>