python DB API

内容

  1. 建立连接connection
  2. 数据库交互对象cursor
  3. 数据库异常类exception

流程

  1. 创建connection
  2. 获取cursor
  3. 执行查询、执行命令、获取数据、处理数据
  4. 关闭cursor 关闭connection
import MySQLdb
print MySQLdb

Python 开发mysql

  1. Python 代码(包含SQL语句)+ Eclipse +Mysql for python
  2. Mysql 服务器 + SQLyog

DB Api -数据库连接对象connection

  • 连接对象:建立Python客户端与数据库的网络连接

  • 创建方法:MySQLdb.Connect(参数)

    • host 字符串 mysql服务器地址
    • port 数字 mysql服务器端口号
    • user 字符串 用户名
    • password字符串 密码
    • db 字符串 数据库名称
    • charset字符串 连接编码
  • connection 对象支持方法

    • cursor() 使用该连接创建并返回游标
    • commit() 提交当前事务
    • rollback() 回滚当前事务
    • close() 关闭连接

实例

import MySQLdb

conn = MySQLdb.Connect(
host='127.xxx',
port=3306,
user='root',
passwd='xxxx'
db='testli'
charset='utf8'
) cursor=conn.cursor() print conn
print corsor cursor.close()
conn.close()

数据库游标对象cursor

  • 游标对象: 用于执行查询和获取结果
  • cursor对象支持的方法:
    • execute(op[,args]) 执行一个数据库查询和命令
    • fetchone() 取得结果的下一行
    • fetchmany(size) 获取结果集的下几行
    • fetchall() 获取结果集中剩下的所有行
    • rowcount 最近一次execute返回数据的行数或者影响行数
    • close() 关闭游标对象
  • execute方法:执行SQL、将结果从数据库获取到客户端
execute(sql)     执行SQL(数据库)   结果   缓存到本地客户端
  • fetch*() 方法:移动rownumber,返回数据,操作对象是本地缓存数据
fetchone()
fetchmany(3)
fetchall()

实例 select查询数据

步骤:

1. 创建connection

2. 获取cursor

3. 使用cursor.execute() 执行select语句

4. 使用cursor.fetch*() 获取并处理数据

5. 关闭cursor 关闭connection

  1. 新建table
CREATE TABLE 'user'(
'userid' INT(11) NOT NULL AUTO_INCREMENT,
'username' VARCHAR(100) DEAULT NULL,
PRIMARY KEY ('userid)
)ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
  1. 进行操作测试
import MySQLdb

conn = MySQLdb.Connect(
host='127.xxx',
port=3306,
user='root',
passwd='xxxx'
db='testli'
charset='utf8'
) cursor=conn.cursor() sql="select * from user"
cursor.execute(sql) print corsor.row.count rs = cursor.fetchone()
print rs rs = cursor.fetchmany(3)
print rs rs = cursor.fetchall()
print rs cursor.close()
conn.close()

结果:

9
(1L,u'name1')
((2L,u'name2'),(3L,u'name3'),(4L,u'name4'))
((5L,u'name5'),(6L,u'name6'),(7L,u'name7'),(8L,u'name8'),(9L,u'name9'))
  1. 传递变量
import MySQLdb

conn = MySQLdb.Connect(
host='127.xxx',
port=3306,
user='root',
passwd='xxxx'
db='testli'
charset='utf8'
) cursor=conn.cursor() sql="select * from user"
cursor.execute(sql) rs = cursor.fetchall()
for row in rs:
print "userid=%s,username=%s" % row cursor.close()
conn.close()

结果:

userid=1,username=name1
userid=2,username=name2
userid=3,username=name3
userid=4,username=name4
userid=5,username=name5
userid=6,username=name6
userid=7,username=name7
userid=8,username=name8
userid=9,username=name9

实例 insert、update/delete更新数据库

1. 创建connection,并获取cursor;
2. 使用cursor.execute()执行insert/update/delete语句;
3. 判断是否出现异常,IF FALSE,使用conn.commit()提交事务;IF True,使用conn.rollback() 回滚事务;
4. 关闭cursor 关闭connection
  • 事务:访问和更新数据库的一个程序执行单元

    * 原子性:事务中包括的诸操作要么都做,要么都不做;
    * 一致性: 事务必须使数据库从一致性状态变到另一个一致性状态
    * 隔离性:一个事务的执行不能被其他事务干扰
    * 持久性:事务一旦提交,它对数据库的改变就是永久性的
  • 开发中怎样使用事务?

    • 关闭自动commit:设置conn.autocommit(False)
    • 正常结束事务:conn.commit()
    • 异常结束事务:con.rollback()
import MySQLdb

conn = MySQLdb.Connect(
host='127.xxx',
port=3306,
user='root',
passwd='xxxx'
db='testli'
charset='utf8'
) cursor=conn.cursor() sql_insert="insert into user(userid,username) values(10,'name10)"
sql_update="update user set username='name91' where userid = 9"
sql_delete="delete from user where userid<3" cursor.execute(sql_insert)
print cursor.rowcount
cursor.execute(sql_update)
print cursor.rowcount
cursor.execute(sql_delete)
print cursor.rowcount conn.commit() cursor.close()
conn.close()

Python_DB_Api的更多相关文章

  1. 【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith

    [C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...

  2. Rabbitmq -Publish_Subscribe模式- python编码实现

    what is Exchanges ?? Let's quickly go over what we covered in the previous tutorials: A producer is ...

  3. Python基础复习_Unit one

    一. 编译&&安装Python2.7     1.安装python第三方模块管理工具 easy_install --->> easy_install-2.7 pip Ipy ...

  4. 研磨设计模式解析及python代码实现——(三)适配器模式(Adapter)

    一.适配器模式定义 将一个类的接口转换成另外一个接口,适配器模式使得原本由于接口不兼容,而不能在一起工作的哪些类能够在一起工作. 二.python 实现 import string import cP ...

  5. python自动开发之(ajax)第二十天

    1.Django请求的生命周期 路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户 2.路由系统 /index/ -> 函数或类.as_view() / ...

  6. 零基础学Python--------第2章 Python语言基础

    第2章  Python语言基础 2.1 Python语法特点 2.11注释 在Python中,通常包括3种类型的注释,分别是单行注释.多行注释和中文编码声明注释. 1.单行注释 在Python中,使用 ...

  7. python套接字解决tcp粘包问题

    python套接字解决tcp粘包问题 目录 什么是粘包 演示粘包现象 解决粘包 实际应用 什么是粘包 首先只有tcp有粘包现象,udp没有粘包 socket收发消息的原理 发送端可以是一K一K地发送数 ...

  8. Python实现将爱词霸每日一句定时推送至微信

    前言 前几天在网上看到一篇文章<教你用微信每天给女票说晚安>,感觉很神奇的样子,随后研究了一下,构思的确是巧妙.好,那就开始动工吧!服务器有了,Python环境有了,IDE打开了...然而 ...

  9. Python学习--------------Atm+购物车系统

    一.程序需求 模拟实现一个ATM + 购物商城程序: 1.额度 15000或自定义 2.实现购物商城,买东西加入 购物车,调用信用卡接口结账 3.可以提现,手续费5% 4.每月22号出账单,每月10号 ...

随机推荐

  1. 修改 EF的默认连接工厂为 Sql Server 而不是LocalDb

      当你用EF6创建一个新项目,不知你是否注意到默认的连接字符串使用了LocalDb而不是SQLServer.但你如果想把默认连接改用SQLSErver而不是LocalDb.这个其实很简单:只需修改下 ...

  2. python爬虫学习(2) —— 爬一下ZOL壁纸

    我喜欢去ZOL找一些动漫壁纸当作桌面,而一张一张保存显然是太慢了. 那怎么办呢,我们尝试使用简单的爬虫来解决这个问题. 0. 本爬虫目标 抓取给定分类「或子分类」网址的内容 分析并得到每个分类下的所有 ...

  3. 洛谷P1415 拆分数列[序列DP 状态 打印]

    题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输出使得最后一个数最小的同时 ...

  4. SSH-Hibernate+Struts2+Spring的股票项目整合

    创建项目之前:我们需要导入我们需要的Hibernate和Struts2和Spring的相关架包.(博客自创,如有问题请留言博主,拒绝盗版,支持正版http://www.cnblogs.com/WuXu ...

  5. BZOJ2748[HAOI2012]音量调节

    Description 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量.在演出开始之前,他已经做好了一个列表,里面写着在每首歌开始之前他想要改 ...

  6. BZOJ1081[SCOI2005]超级格雷码

    Description 著名的格雷码是指2n个不同n位二进制数(即0~2n-1,不足n位在前补零)的一个排列,这个排列满足相邻的两个二进制数的n位数字中最多只有一个数字不同(例如003和001就有一个 ...

  7. iPhone添加邮箱

    阿里云邮箱设置 手机自带的电子邮件客户端该如何添加阿里云邮账号呢?这里以iPhone4s和安卓系统为例,分别进行添加阿里云邮箱帐号的添加.   官网是这么介绍的:   一.如下以iPhone4s为例, ...

  8. 导出本地和远程SVN项目, Export remote SVN repository

    在有服务器控制权的情况下, 源服务器上 sudo svnadmin dump ironbank/ > ~/ironbank.svn.dump 在目的服务器上 sudo svnadmin crea ...

  9. node爬虫之gbk网页中文乱码解决方案

    之前在用 node 做爬虫时碰到的中文乱码问题一直没有解决,今天整理下备忘.(PS:网上一些解决方案都已经不行了) 中文乱码具体是指用 node 请求 gbk 编码的网页,无法正确获取网页中的中文(需 ...

  10. 极光推送JPush的快速集成

    首先到极光推送的官网上创建一个应用,填写对应的应用名和包名. 创建好之后下载Demo 提取Sdk里面的图片和xml等资源文件放自己项目的相应位置,然后要注意的是.so文件的放置位置: 在main目录下 ...