原文链接:http://www.one2know.cn/python9/

python DB API

  • python访问数据库的统一接口规范,完成不同数据库的访问
  • 包含的内容: connection cursor exceptions
  • 访问数据库流程: 1.创建connection 2.获取cursor 3.操作 4.关闭cursor 5.关闭connection

python MySQL开发环境

连接对象connection

  • 连接对象: python客户端与数据库的网络连接
  • 创建方法: pymysql.connect(参数)

  • connection对象支持的方法:

  • 例子:
import pymysql

conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
db = 'database1',
charset = 'utf-8')
cursor = conn.cursor() print(conn)
print(cursor) cursor.close()
conn.close()

游标对象cursor

  • 游标对象: 用于执行查询和获取结果
  • cursor对象支持的方法:

  • execute()方法: 执行SQL,将结果从数据库获取到客户端

  • fetch*()方法: 移动rownumber,返回数据

实例 - select查询数据

  • 流程

  • 代码
import pymysql

conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
db = 'database1',
charset = 'utf-8'
)
cursor = conn.cursor() sql = "select * from table"
cursor.execute(sql) print(cursor.rowcount) rs = cursor.fetchone()
print(rs) rs = cursor.fetchmany(3)
print(rs) rs = cursor.fetchall()
print(rs) cursor.close()
conn.close()

实例 - insert/update/delete更新数据

  • 流程

  • 事务: 访问和更新数据库的一个程序执行单元

  • 开发中怎样使用事务

    1.关闭自动commit: 设置conn.autocommit(False),默认就是这个状态

    2.正常结束事务: conn.commit()

    3.异常结束任务: conn.rollback()
  • 代码
import pymysql

conn = pymysql.connect(
host = '127.0.0.1',
port = 3306,
user = 'root',
db = 'database1',
charset = 'utf-8'
)
cursor = conn.cursor() sql_insert = "insert into database1(userid,username) values(10,'name10')"
sql_update = "update database1 set username='name91' where userid = 9"
sql_delete = "delete from database1 where userid < 3" try:
cursor.execute(sql_insert)
print(cursor.rowcount) # 查看对多少行造成了影响
cursor.execute(sql_update)
print(cursor.rowcount)
cursor.execute(sql_delete)
print(cursor.rowcount)
conn.commit() #提交,更新数据库
exception Exception as e:
print e
conn.rollback() #回滚,只要有一条有错就啥都不提交了 cursor.close()
conn.close()

银行转账实例 - A给B转账100元

  • 流程

  • 实例数据库
  • 代码
# coding:utf8
import pymysql
import sys class TransferMoney(object):
def __init__(self,conn):
self.conn = conn def check_acct_available(self,acctid):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid=%s" % acctid
cursor.execute(sql)
print("check_acct_available:"+sql)
rs = cursor.fetchall()
if len(rs)!=1:
raise Exception("账号%s不存在" % acctid)
finally:
cursor.close() def has_enough_money(self,acctid, money):
cursor = self.conn.cursor()
try:
sql = "select * from account where acctid=%s and money>%s" % (acctid,money)
cursor.execute(sql)
print("has_enough_money:" + sql)
rs = cursor.fetchall()
if len(rs) != 1:
raise Exception("账号%s没有足够的钱" % acctid)
finally:
cursor.close() def reduce_money(self,acctid):
cursor = self.conn.cursor()
try:
sql = "update account set money=money-%s where acctid=%s" % (money,acctid)
cursor.execute(sql)
print("reduce_money:" + sql)
rs = cursor.fetchall()
if cursor.rowcount != 1:
raise Exception("账号%s减款失败" % acctid)
finally:
cursor.close() def add_money(self,acctid):
cursor = self.conn.cursor()
try:
sql = "update account set money=money+%s where acctid=%s" % (money, acctid)
cursor.execute(sql)
print("reduce_money:" + sql)
rs = cursor.fetchall()
if cursor.rowcount != 1:
raise Exception("账号%s加款失败" % acctid)
finally:
cursor.close() def transfer(self,source_acctid,target_acctid,money):
try:
self.check_acct_available(source_acctid)
self.check_acct_available(target_acctid)
self.has_enough_money(source_acctid,money)
self.reduce_money(source_acctid)
self.add_money(target_acctid)
self.conn.commit()
except Exception as e:
self.conn.rollback()
raise e if __name__ == "__main__":
source_acctid = sys.argv[1]
target_acctid = sys.argv[2]
money = sys.argv[3] conn = pymysql.connect(host='127.0.0.1',user='root',
passwd='123456',port=3306,db='database1')
tr_money = TransferMoney(conn) try:
tr_money.transfer(source_acctid,target_acctid,money)
except Exception as e:
print("出现问题:"+str(e))
finally:
conn.close()

Python MySQL 数据库的更多相关文章

  1. python mysql数据库压力测试

    python mysql数据库压力测试 pymysql 的执行时间对比 1,装饰器,计算插入1000条数据需要的时间 def timer(func): def decor(*args): start_ ...

  2. 10分钟教你Python+MySQL数据库操作

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 本文介绍如何利用python来对MySQL数据库进行操作,本文将主要从以下几个方面展开介绍: 1.数据库介绍 2.MySQL数据库安装和设置 ...

  3. python+mysql数据库的简单操作

    最近接了一个任务,测试某项类似于收益情况报表的功能,因计算公式复杂,单纯手算过于复杂,所以想到写成脚本 根据python的分治原则,先整了几个函数用于实现计算逻辑,后发现数据输入过于繁琐,所以决定使用 ...

  4. python mysql数据库基本操作方法

    实现:使用Python实现用户登录,如果用户存在(数据库表中存在)则登录成功(假设该用户已在数据库中) import pymysql username = input('输入用户名:').strip( ...

  5. python mysql数据库操作

    一.pymysql 模块安装(本文博客推荐:https://www.cnblogs.com/clschao/articles/10023248.html) pip3 install pymysql 二 ...

  6. python mysql数据库中 json的存储

    首先数据库里的字段类型需要设置为json: 存储这个json时需要把这个json变为字符串,而且是最外层为单引号,内部字符串为双引号!如图:  所以python脚本中这个字段的字符串应该这样写: 得出 ...

  7. python --- mysql数据库的操作

    1.pymysql的初使用 import pymysql db_config = { 'host' :'127.0.0.1', 'user':'root', ', , 'database':'test ...

  8. 【转】python mysql数据库 'latin-1' codec can't encode character错误问题解决

    UnicodeEncodeError: 'latin-1' codec can't encode character   "UnicodeEncodeError:'latin-1' code ...

  9. python mysql数据库 'latin-1' codec can't encode character错误问题解决

    "UnicodeEncodeError:'latin-1' codec can't encode character ..."     This is because MySQLd ...

随机推荐

  1. Java NIO学习系列六:Java中的IO模型

    前文中我们总结了linux系统中的5中IO模型,并且着重介绍了其中的4种IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路复用(IO multi ...

  2. 一文掌握 Spring Boot Profiles

    Spring Boot Profiles 简介 Profile 的概念其实很早在 Spring Framework 就有了,在 Spring Framework 3.1 版本引入了注解 @Profil ...

  3. Mybatis与Spring集成时都做了什么?

    Mybatis是java开发者非常熟悉的ORM框架,Spring集成Mybatis更是我们的日常开发姿势. 本篇主要讲Mybatis与Spring集成所做的事情,让读过本文的开发者对Mybatis和S ...

  4. WebGL简易教程(一):第一个简单示例

    目录 1. 概述 2. 示例:绘制一个点 1) HelloPoint1.html 2) HelloPoint1.js (1) 准备工作 (2) 着色器 (3) 顶点着色器 (4) 片元着色器 (5) ...

  5. Socket编程:UDP和TCP概论及案例

    网络编程的三要素: 1.IP地址  2.端口 3.协议 什么是Socket? Socket就是通信链路的端点称"套接词". 基于TCP协议的Socket网络通信: 用来实现双向安全 ...

  6. cdh5-MariaDB 配置(暂未排版)

    在多数分布MariaDB的设施默认设置使用保守的缓冲区的大小和内存使用. 使用保守的缓冲区大小和内存使用率 Cloudera的数据库管理服务器,监控活动,报告管理,Cloudera 导航,Hive 的 ...

  7. Linux curl 表单登录或提交与cookie使用

    本文主要讲解通过curl 实现表单提交登录.单独的表单提交与表单登录都差不多,因此就不单独说了. 说明:针对curl表单提交实现登录,不是所有网站都适用,原因是有些网站后台做了限制或有其他校验.我们不 ...

  8. 浅谈微服务架构与服务治理的Eureka和Dubbo

    前言 本来计划周五+周末三天自驾游,谁知人算不如天算,周六恰逢台风来袭,湖州附近的景点全部关停,不得已只能周五玩完之后,于周六踩着台风的边缘逃回上海.周末过得如此艰难,这次就聊点务虚的话题,一是浅谈微 ...

  9. HDU 4635 (完全图 和 有向图缩点)

    题目链接:HDU  4635 题目大意: 给你一个有向图,加有向边,使得这个图是简单有向图.问你最多加多少条有向边. 简单有向图: 1.不存在有向重边. 2.不存在图循环.(注意是不存在 “图” 循环 ...

  10. SpringBoot:Mybatis + Druid 数据访问

    西部开源-秦疆老师:基于SpringBoot 2.1.7 的博客教程 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! 简介 对于数据访问层 ...