MySQL(官方发音是“My es-kew-el”,但很多人都说成“My Sequel”)是目前最受欢迎的开源关系型数据库管理系统。 一个开源项目具有如此之竞争力实在是令人意外,它的流行程度正在不断地接近另外两个闭源的商业数据库系统: 微软的 SQL Server 和甲骨文的Oracle 数据库(MySQL 在 2010 年被甲骨文收购)。它的流程程度实在是名符其实。对大多数应用来说, MySQL 都是不二选择。它是一种非常灵活、稳定、功能齐全的 DBMS, 许多顶级的网站都在用它: YouTube、 Twitter 和Facebook等。
因为它受众广泛, 免费,开箱即用,所以它也是网络数据采集项目中常用的数据库。
1.与Python整合
Python 没有内置的 MySQL 支持工具。不过,有很多开源的库可以用来与 MySQL 做交互,Python 2.x 和 Python 3.x 版本都支持。最有名的一个库就是 PyMySQL(https://github.com/PyMySQL/PyMySQL)。
PyMySQL安装:
pip install pymysql
连接数据库:
在进行本文以下内容之前需要注意:
- 你有一个MySQL数据库,并且已经启动。
- 你有可以连接该数据库的用户名和密码
- 你有一个有权限操作的database
以下实例链接 Mysql 的 testdb(自己建的)数据库:
import pymysql
db = pymysql.connect(host='localhost',user='root',passwd='admin',db='testdb')
cursor = db.cursor()
cursor.execute("select version()")
data = cursor.fetchone()
print ("Database version : %s " % data)
db.close()
执行以上脚本输出结果如下:
Database version : ('5.6.41-log',)
创建数据库表
如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE:
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost", "root", "admin", "testdb")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 使用预处理语句创建表
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()
print("success")
成功创建employee表:
数据库插入操作
以下实例使用执行 SQL INSERT 语句向表 EMPLOYEE 插入记录:
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost", "root", "admin", "testdb")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用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)
# 提交到数据库执行
db.commit()
except:
# 如果发生错误则回滚
db.rollback()
# 关闭数据库连接
db.close()
print("succcess")
以下代码使用变量向SQL语句中传递参数:
user_id = "test123" password = "password" con.execute('insert into Login values( %s, %s)' % \ (user_id, password))
数据库查询操作
查询单条数据
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost", "root", "admin", "testdb")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 插入语句
sql = """select * from employee where age=20"""
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
ret = cursor.fetchone()
print(ret)
cursor.close()
# 关闭数据库连接
db.close()
查询多条数据
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost", "root", "admin", "testdb")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 插入语句
sql = """select * from employee"""
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
ret = cursor.fetchall()
print(ret)
cursor.close()
# 关闭数据库连接
db.close()
修改数据库
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost", "root", "admin", "testdb")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# SQL 修改语句
sql = """update employee set age=%s where income=%s"""
age = 22
income = 2001
try:
# 执行sql语句
cursor.execute(sql,[age,income])
# 提交到数据库执行
db.commit()
except:
# 如果发生错误则回滚
db.rollback()
cursor.close()
# 关闭数据库连接
db.close()
print("succcess")
结果如下:
删除操作
删除操作用于删除数据表中的数据,以下实例演示了删除数据表 EMPLOYEE 中 AGE 大于 21 的所有数据:
import pymysql
db = pymysql.connect(host='localhost',user='root',passwd='admin',db='testdb')
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (21)
try:
# 执行SQL语句
cursor.execute(sql)
# 提交修改
db.commit()
except:
# 发生错误时回滚
db.rollback()
# 关闭连接
db.close()
对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。