专栏:008:MySQLdb及其银行模拟转账

用理工科思维看待这个世界

系列爬虫专栏

崇尚的学习思维是:输入,输出平衡,且平衡点不断攀升。

曾经有大神告诫说:没事别瞎写文章;所以,很认真的写的是能力范围内的,看客要是看不懂,不是你的问题,问题在我,得持续输入,再输出。

今天的主题是:MySQLdb及其银行模拟转账

1:框架

序号

内容

说明

01

概念及其工具介绍

--

02

SQL语句

--

03

实例演示数据库操作

--

04

银行转账操作演示

--

05

参考及其说明

--


2:概念,工具介绍

  • MySQL:关系型数据库 MySQL(官方发音为英语发音:/maɪ ˌɛskjuːˈɛl/“My S-Q-L”[1],但也经常读作英语发音:/maɪ ˈsiːkwəl/“My Sequel”)原本是一个开放源代码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被昇阳微系统(Sun Microsystems)收购。2009年,甲骨文公司(Oracle)收购昇阳微系统公司,MySQL成为Oracle旗下产品。
  • MySQL 服务器的 下载:官网
  • python MySQL 驱动 安装: 下载安装
  • python MySQL 开发环境

01:Python 集成开发环境编写SQL语句 02:python客户端 + python MySQL 驱动 03:MySQL 服务器:MySQL客户端工具

本地需要先开启MySQL服务,python编写SQL语句,驱动完成python和MySQL之间的联系。这样就可以实现数据库数据的增删改查。


3:SQL语句

  • SQL语句 SQL是用于访问和处理数据库的标准的计算机语言: 教程w3school 基本操作:增删改查
  • 查: SELECT 列名称 FROM 表名称 一个名为"Persons"的表:提取LastName列:select LastName from Persons

001.png

结果:

002.png

  • 改: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
  • 增: 01:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) 02:INSERT INTO 表名称 VALUES (值1, 值2,....)
  • 删: DELETE FROM 表名称 WHERE 列名称 = 值

还有好些高级的用法....点这里

这里主要讲解在python中的使用。


4:代码演示

  • MySQLdb

01: 创建连接对象

序号

方法

使用说明

01

MySQLdb.connet()

创建数据库连接对象

|参数|类型|说明| |---|---| |host|字符串|MySQL服务器地址,本地:localhost| |port|数字|MySQL服务器端口号| |user|字符串|用户名,默认root| |passwd|字符串|密码,默认空| |db|字符串|数据库名称| |charset|字符串|连接编码|

02:连接对象支持的方法

方法名

说明

cursor()

游标对象:用于查询和获取结果

commit()

提交当前事务

rollback()

回滚当前事务

close()

关闭连接

03:游标对象 所支持的方法

方法

说明

execute()

执行一个数据库查询和命令

fetchone()

取结果集的下一个

fetchmany(size)

获取结果集下几行

fetchall()

获取剩下的所有

rowcount

最近一次execute影响的行数

close()

关闭游标对象

04:使用MySQLdb的方法流程

  • connection:建立数据库连接
  • cursor: 执行SQL,获取数据库数据
  • 提交事务或者回滚操作
  • 关闭cursor,关闭connection连接对象

数据库可视化工具:SQLyog (有好些,看你自己喜好了) 在本地已经手工创建了一个db = exercise的数据库,表名为:persons如图:

Id

LastName

FirstName

Address

City

1

Adams

John

Oxford Street

London

2

Bush

George

Fifth Avenue

New York

3

Carter

Thomas

Changan Street

Beijing

# 获取第一行
import MySQLdb
connector = MySQLdb.connect(
    user="root",
    host="localhost",
    port=3306,
    passwd="123456",
    db="exercise",
    charset="utf8")  # 创建连接对象
cur = connector.cursor()  # 创建游标对象
sql = 'select * from persons WHERE id =1' # 编写的Sql语句
cur.execute(sql) # 使用游标对象的执行方法 
print(cur.fetchone()) # 使用右边对象的获取方法
# output
(1, 'Adams', 'John', 'Oxford Street', 'London')
# 第一行的FirstName 更改成 'xiexiaolu'
sql2 = "UPDATE persons SET FirstName = 'xiexiaolu' WHERE id = 1"
cur.execute(sql2)

# 表数据变成
(1, 'Adams', 'xiexiaolu', 'Oxford Street', 'London')
(2, 'Bush', 'George', 'Fifth Avenue', 'New York')
(3, 'Carter', 'Thomas', 'Changan Street', 'Beijing')
# 增加一条数据
sql3 ="INSERT INTO persons(Id, LastName,FirstName,Address,City)VALUES (4, 'xiaolu', 'xie','zhabei','shanghai')"

# output
(1, 'Adams', 'John', 'Oxford Street', 'London')
(2, 'Bush', 'George', 'Fifth Avenue', 'New York')
(3, 'Carter', 'Thomas', 'Changan Street', 'Beijing')
(4, 'xiaolu', 'xie', 'zhabei', 'shanghai')

更多操作


5:银行转账操作演示

模拟银行两个账户之间的资金流动: 流程:

  • 检查账户是否存在
  • 检查账户是否存在足够的资金
  • A账户 - 资金
  • B账户 + 资金

表名为:bank:完成zhangsanlisi转账100元

id

money

zhangsan

110

lisi

10

# 检查账户
def check_account(self, account_id):
    cur =  self.con.cursor()
    sql = 'select * from bank WHERE id ="%s"' % (str(account_id))
    cur.execute(sql)
    if cur.rowcount == 1:
        print("%s existes."%(account_id))
    else:
        print("%s is wrong" % account_id)
# 检查是否有足够的钱
def check_money(self, values, account_id):
    cur = self.con.cursor()
    sql = 'select * from bank WHERE id="%s" AND money>%s' % (account_id, values)
    cur.execute(sql)
    print(cur.rowcount)
    if cur.rowcount == 1:
        print("Enough money!")
        return True
    else:
        print("No enough money!")
        return False
# 减款操作
def subtract(self, accout_id, tranfer_money, Flag):
    cur = self.con.cursor()
    if Flag:
        try:
            sql = 'update bank SET money = money - %s where id = "%s"' % (tranfer_money, accout_id)
            cur.execute(sql)
            print(cur.rowcount)
            if cur.rowcount == 1:
                print(u"减款成功")
        finally:
            cur.close()
    else:
        print(u"操作不成功.")
#加款操作
def add(self, accout_id, tranfer_money, Flag):
    cur = self.con.cursor()
    if Flag:
        try:
            sql = 'update bank SET money = money + %s WHERE id = "%s"' % (tranfer_money, accout_id)
            cur.execute(sql)
            print(cur.rowcount)
            if cur.rowcount ==1:
                print(u"加款成功")
        finally:
            cur.close()
    else:
        print(u"操作不成功.")

效果显示:

005.png

执行后:

006.png

zhangsan existes.
lisi existes.
Enough money!
减款成功
加款成功

第二次执行的初始状态:

006.png

zhangsan existes.
lisi existes.
0
No enough money!
操作不成功.
操作不成功.

完整版代码:完整代码 数据库的学习是为了完成爬虫数据的储存。


6:参考及其说明

参考列表: 01: 参考1 02: 参考2 03:参考:慕课网

Github:github

关于本人: 国内小硕,半路出家的IT学习者。 兴趣领域:爬虫 , 数据科学 本人正在构建一个共同成长爬虫小型社群。有兴趣私信。 文档及代码托管在Github上。

下期预告:爬取豆瓣电影,并存储在数据库中...(为啥都爬豆瓣来着)


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JackieZheng

分库分表利器——sharding-sphere

所以,结果就是我们一直没有真正使用分库分表。曾经好几次,感觉没有分库分表(起码要分表),项目就做不下去了,但是由于跨部门、工具约束、项目被砍等各种原因最终都偃旗...

2921
来自专栏互联网杂技

SpringBoot (六) :如何优雅的使用 mybatis

这两天启动了一个新项目因为项目组成员一直都使用的是mybatis,虽然个人比较喜欢jpa这种极简的模式,但是为了项目保持统一性技术选型还是定了 mybatis。...

952
来自专栏Python攻城狮

数据库 - MySQL1.MySQL内容简介2.安装管理(linux)window下安装Mysql3.数据的完整性4.脚本命令操作5.数据库查询

MySQL数据库,是当前应用非常广泛的一款关系型数据库 MySQL官网 数据库排名

1113
来自专栏Rgc

mysql数据库优化(二)

https://www.cnblogs.com/sevck/p/6733702.html

1902
来自专栏智能大石头

6,ORM组件XCode(撬动千万级数据)

有了前面的《动手》,基本上可以进行开发了。本篇我们来试试XCode的基本功功力如何,测试在单表一千万业务数据的环境下查询的速度,添删改等没什么可测试的。其实应...

2038
来自专栏纯洁的微笑

springboot(六):如何优雅的使用mybatis

这两天启动了一个新项目因为项目组成员一直都使用的是mybatis,虽然个人比较喜欢jpa这种极简的模式,但是为了项目保持统一性技术选型还是定了 mybatis。...

49612
来自专栏LanceToBigData

MySQL(三)之SQL语句分类、基本操作、三大范式

一、SQL语句的分类   DML(Data Manipulation Langauge,数据操纵/管理语言) (insert,delete,update,se...

2735
来自专栏一“技”之长

iOS开发之AddressBook框架详解

    首先,AddressBook框架是一个已经过时的框架,iOS9之后官方提供了Contacts框架来进行用户通讯录相关操作。尽管如此,AddressBoo...

1961
来自专栏Jerry的SAP技术分享

使用字面量或者绑定变量在HANA Studio里执行SQL语句

在SAP note 2000002 – FAQ: SAP HANA SQL Optimization里提到了SQL语句的两种执行方式,具体差异体现在where语...

2009
来自专栏逸鹏说道

SQL Server 存储过程的几种常见写法分析

最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫, 不知道各种写法孰优孰劣,该选用那种写法,以及各种写法优缺点,本文以一...

4238

扫码关注云+社区