MySQL数据库操作
本文中只限于介绍如何利用Python来操作MySQL数据库。下面简单介绍一下如何为自己的Python IDE安装MySQL:
Step1 确认是否已经安装有MySQL,执行以下代码:
# encoding: utf-8 #!/usr/bin/python
import MySQLdb
如果执行后报错就说明没有安装MySQL,否则则证明你已经无需安装MySQL。
Step2 下载MySQL并安装:
下载地址一:请点这里;
下载地址二:请点这里。
具体的安装步骤和Python的其他库安装方式类似,不在赘述。你可以用Step1的方法来确认你是否已经成功安装MySQL。
2 数据库连接
连接数据库前,请先确认以下事项:连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码。
以下实例链接Mysql的TESTDB数据库,对应了DB-API的四个步骤:
# encoding: utf-8 #!/usr/bin/python
# 1 引入API模块 import MySQLdb
# 2 获取与数据库的连接
# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 3 执行SQL语句和存储过程
# 使用cursor()方法获取操作游标 cursor = db.cursor() # 使用execute方法执行SQL语句 cursor.execute("SELECT VERSION()") # 使用 fetchone() 方法获取一条数据库。 data = cursor.fetchone() print "Database version : %s " % data
# 4 关闭数据库连接 # 关闭数据库连接 db.close()
执行结果显示:
Database version : 5.0.45
2 创建数据库表
我们尝试建立一个自定义的数据库表:
数据库表名称:EMPLOYEEEMPLOYEE
数据表字段为:FIRST_NAME,LAST_NAME,AGE,SEX 和 INCOME。
# encoding: utf-8 #!/usr/bin/python import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # 如果数据表已经存在使用 execute() 方法删除表。 cursor.execute("DROP TABLE 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()
3 插入数据操作
使用SQL INSERT 语句向数据库表 EMPLOYEE 插入记录:
# encoding: utf-8 #!/usr/bin/python import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用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: # Rollback in case there is any error db.rollback() # 关闭数据库连接 db.close()
在这里提几个重要的点:
1)请注意一定要有conn.commit()这句来提交事务,要不然不能真正的插入数据。
2)dollback()是回滚操作,回滚(Rollback)指的是程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。回滚包括程序回滚和数据回滚等类型。
4 数据库查询操作
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
- fetchone():该方法获取下一个查询结果集。结果集是一个对象
- fetchall():接收全部的返回结果行.
- rowcount:这是一个只读属性,并返回执行execute()方法后影响的行数。
查询EMPLOYEE表中salary(工资)字段大于1000的所有数据:
# encoding: utf-8 #!/usr/bin/python import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用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()
执行结果显示:
fname=Mac, lname=Mohan, age=20, sex=M, income=2000
5 数据库更新操作
更新操作用于更新数据表的的数据,以下实例将 TESTDB表中的 SEX 字段全部修改为 'M',AGE 字段递增1:
# encoding: utf-8 #!/usr/bin/python import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用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()
6 数据库的事务机制
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
- 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
- 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
- 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
比如:
# SQL删除记录语句 sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20) try: # 执行SQL语句 cursor.execute(sql) # 向数据库提交 db.commit() except: # 发生错误时回滚 db.rollback()
对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。
7 常用函数
下面总结一下常用的函数:
1)Connect() 方法用于创建数据库的连接,里面可以指定参数:用户名,密码,主机等信息。这只是连接到了数据库,要想操作数据库需要创建游标。
2)commit() 提交
3)rollback() 回滚
4)cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集
5)cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行.
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
6)scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条.
相关文章
- Dapper操作MySQL数据库获取JSON数据中文乱码
- MySQL新建数据库时utf8_general_ci编码解释
- mysql之数据库操作进阶(三)
- mysql之基本数据库操作(二)
- MySQL 定时备份数据库(非常全)
- 使用egg-mysql操作mysql数据库
- MySQL实战系列2:你不可不知的数据库操作
- MySQL集群节点宕机,数据库脑裂!如何排障?
- 数千台MySQL数据库遭黑客比特币勒索,该怎么破?
- Mysql数据库优化配置文件my.ini文件配置解释
- python通过mysql.connector操作mysql数据库
- 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来
- mysql数据库提示本地无法连接远程服务器(Host is not allowed to connect to this MySQL server)解决办法
- Mysql数据库表复制操作语句
- MySQL 数据库设计 笔记与总结(1)需求分析
- mysql数据库远程访问权限控制
- 《深入浅出MySQL:数据库开发、优化与管理维护(第2版)》一一1.1 MySQL的下载
- (转载)MySQL 数据库 增删查改、克隆、外键 等操作
- python操作mysql数据库系列-安装MySql
- Linux系统下 MYSQL数据库中的数据库文件在本机内迁移 (需暂停服务的方式)
- MySQL教程:数据库具体操作
- Linux数据库:MYSQL启用和查看二进制日志
- Mysql在项目中相关使用(简单操作数据库)
- Mysql数据库常用表结构操作语句
- MySQL数据库基础学习
- MySQL数据库优化技术概述
- JIRA6.0更换数据库到MYSQL
- python数据库操作,python从mssql 查询结果,插入到mysql表
- centos mysql 非正常关闭导致数据库损坏的恢复及开启自动邮件备份
- 猫眼电影爬取(二):requests+beautifulsoup,并将数据存储到mysql数据库
- 服务器访问数据库表mysql
- MySQL-操作数据库(存储引擎)
- [Work Summary] 操作Mysql数据库