设为首页 收藏本站
查看: 862|回复: 0

[经验分享] [Python] 学习笔记之MySQL数据库操作

[复制链接]

尚未签到

发表于 2015-11-29 10:55:30 | 显示全部楼层 |阅读模式
1 Python标准数据库接口DB-API介绍
    Python标准数据库接口为 Python DB-API,它为开发人员提供了数据库应用编程接口。Python DB-API支持很多种的数据库,你可以选择跟自己项目相关的数据库。Python DB-API支持的数据库如下所示:


  • GadFly
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • Oracle
  • Sybase
    不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。
    Python DB-API使用流程:
    1)引入 API 模块。
    2)获取与数据库的连接。
    3)执行SQL语句和存储过程。
    4)关闭数据库连接。
    Python的数据库学习,主要在于学习DB-API的学习流程,记住这四步,你就已经成功了一大半了。

2 MySQL的安装
    因为博主目前只关注MySQL的使用,所以本文中只限于介绍如何利用Python来操作MySQL数据库。下面简单介绍一下如何为自己的Python IDE安装MySQL:
    Step1 确认是否已经安装有MySQL,执行以下代码:



# encoding: utf-8
#!/usr/bin/python
import MySQLdb
    如果执行后报错就说明没有安装MySQL,否则则证明你已经无需安装MySQL。
    Step2 下载MySQL并安装:

    下载地址一:请点这里;
    下载地址二:请点这里。
    具体的安装步骤和Python的其他库安装方式类似,不在赘述。你可以用Step1的方法来确认你是否已经成功安装MySQL。

3 数据库连接
    连接数据库前,请先确认以下事项:连接数据库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
4 创建数据库表
    我们尝试建立一个自定义的数据库表:
    数据库表名称: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()
5 插入数据操作
    使用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)指的是程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。回滚包括程序回滚和数据回滚等类型。

6 数据库查询操作
    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
7 数据库更新操作
    更新操作用于更新数据表的的数据,以下实例将 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()
8 数据库的事务机制
    事务机制可以确保数据一致性。
    事务应该具有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()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。

9 常用函数
    下面总结一下常用的函数:
    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条.

10 参考内容
    [1] W3CSCHOOL.CC python操作mysql数据库

    [2] 一个人的旅行

    [3] 虫师

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-144852-1-1.html 上篇帖子: [原]Python Web部署方式总结 下篇帖子: Python各式装饰器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表