详解利用Python操作mysql数据库

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()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值