python操作MySQL 模拟简单银行转账操作

一、基础知识

1、MySQL-python的安装

下载,然后 pip install 安装包

2、python编写通用数据库程序的API规范

(1)、数据库连接对象 connection,建立python客户端与数据库的网络连接,创建方法为 MySQLdb.Connect(参数)

参数有六个:     host(MySQL服务器地址,一般本地为127.0.0.1)

port(MySQL服务器端口号)
                            user(用户名)
                            passwd(密码)
                            db(数据库名称)
                            charset(连接编码)

connection的方法: cursor()使用该连接并返回游标

commit()提交当前事务
                                      rollback()回滚当前事务
                                      close()关闭连接

(2)、数据库游标对象cursor,用于执行查询和获取结果

方法:execute(op[,args])执行一个数据库查询 和 命令

fetchone()取得结果集的下一行
              fetchmany(size)获取结果集的下几行
              fetchall()获取结果集中剩下的所有行
              rowcount 最近一次execute返回数据的行数或影响行数
              close()关闭游标对象

connection与cursor:connection相当于python与MySQL之间的路,而cursor相当于路上的运输车来传送命令与结果。

3、简单命令:

select  查询数据:sql="select * from 表名 所查项目"
insert  插入数据:sql=“insert into 表名  所插项目”
update 更改数据: sql=“updata 表名 set  所改项目 ”
delete 删除数据: sql=“delete from 表名 所删项目”
where也是sql命令的关键存在,通常是  where 表头=列名 来定位那一列

4、事务

访问和更新数据库的一个程序执行单元,所执行的命令,都可以称为事务

具有原子性,一致性,隔离性,持久性

事务执行:

conn.commit() 正常结束事务
     conn.rollback() 异常结束事务,对事务进行回滚,若程序执行单元中的连续的操作在进行中出错,之前的操作还原。

简单操作过程:    开始 → 创建connection →获取cursor → 程序执行单元 → 关闭cursor → 关闭connection → 结束

二、模拟银行转账系统代码

#coding=utf-8
import sys
import MySQLdb
'''''
python操作MySQL数据库,模拟银行转账
'''
class Trans_for_Money(object):
 #初始化 类
 def __init__(self,conn):
  self.conn = conn
 #### 1、检查所输入的账号是否存在 ####
 def check_acct_available(self,source_acctid):
  #使用与数据库的链接并返回游标
  cursor=self.conn.cursor()
  try:
   #数据库命令
   sql="select * from tr_money where acctid=%s" %source_acctid
   #执行命令
   cursor.execute(sql)
   #为方便观察执行过程
   print "check_acct_available:" + sql
   #讲结果集放入变量result中,若result不等于1,则没有这个账号,输出异常
   result=cursor.fetchall()
   if len(result)!=1:
    raise Exception("账号%s不存在" %source_acctid)
  finally:
   #若过程出现问题,仍需要关闭游标对象
   cursor.close()
 #### 2、检查减款人余额是否充足,方法与上一个函数一样,只是多加了一个money参数 ###
 def has_enough_money(self,source_acctid,money):
  cursor=self.conn.cursor()
  try:
   sql="select * from tr_money where acctid=%s and money>%s" %(source_acctid,money)
   cursor.execute(sql)
   print "has_enough_money:" + sql
   result=cursor.fetchall()
   if len(result)!=1:
    raise Exception("账号%s余额不足" %source_acctid)
  finally:
   cursor.close()
 #### 3、减款操作 ###
 def reduce_money(self,source_acctid,money):
  cursor=self.conn.cursor()
  try:
   #数据库命令,减去对应减款人的金额数
   sql="update tr_money set money=money-%s where acctid=%s" %(money,source_acctid)
   cursor.execute(sql)
   print "reduce_money:" + sql
   #操作的execute()数据行数不等于1则减款失败
   if cursor.rowcount!=1:
    raise Exception("账号%s减款失败" %source_acctid)
  finally:
   cursor.close()
 #### 4、收款操作,与减款方法相同 ###
 def add_money(self,target_acctid,money):
  cursor=self.conn.cursor()
  try:
   sql="update tr_money set money=money+%s where acctid =%s" %(money,target_acctid)
   cursor.execute(sql)
   print "add_money:" + sql
   if cursor.rowcount!=1:
    raise Exception("账号%s收款失败" %target_acctid)
  finally:
   cursor.close()
 #### 5、分别传入参数,代入上方函数,执行操作 ###
 def trans_for(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,money)
   self.add_money(target_acctid,money)
   #提交当前事务
   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 = MySQLdb.Connect(
       host='127.0.0.1',
       port=3306,
       user='root',
       passwd='12345678',
       db='tt',
       charset='utf8'
       )
 #手动输入减款人、收款人、转款数
 source_acctid=raw_input("请输入减款人: ")
 target_acctid=raw_input("请输入收款人: ")
 money=raw_input("请输入转款数: ")
 #将参数传入类中
 tr_money=Trans_for_Money(conn)
 try:
  tr_money.trans_for(source_acctid,target_acctid,money)
 except Exception as e:
  print"出现问题:"+str(e)
 finally:
  conn.close()
  #关闭链接 

三、问题解决

1、sys.argv[ ]

因为教学视频中用的IDE是MyEclipse,最后用run.Configuration 输入参数,而我用的是pycharm,表示笨的找不到还是其实它没有!

所以选择用raw_input() 在执行过程中输入参数

其实有去了解sys.argv[ ],但还是懂不太清楚。

2、  mysql_exceptions.IntegrityError: (1062, "Duplicate entry '7' for key 'PRIMARY'")

这个错误表示你所要插入的数据已经存在,最好去观察一下数据库的数据与自己的程序操作是否有矛盾

3、MySql 建表或输入数值时出错:1170-BLOB/TEXT column‘name'used in key specification without a key length

错误信息为BLOB或者TEXT字段使用了未指定键值长度的键

解决方法:设置其他为主键  或   将数据形式改为varchar

具体解释网址:http://myhblog1989.blog.163.com/blog/static/183225376201110875818884/

4、TypeError: 'post' is an invalid keyword argument for this function

错误原因:TypeError: “post”是这个函数的无效参数

这个问题错的很无语,一时脑子进水把 “port”=3306 写成了“post”=‘3306'

5、1054, "Unknown column 'acctid' in 'where clause'

错误原因:在where子句中找不到“acctid”列

呵呵,上个错误脑子进的水没排出来,把表头写错了…………

6、另外,还有一个错误是手动输入的减款,收款人设为字母或汉字时找不到

可能是我代码或数据库建表时的设定问题,表示在字符转换和数据库这方面还是小白一枚,继续奋斗吧!

7、MySQL数据库的启动

计算机 → 右键 → 管理 → 服务和应用程序 → 服务 → 找到MySQL → 右键启动

四、具体执行显示

1、数据库 tr_money 表的初始状态

2、代码执行,输入减款人,收款人,转款数额

3、执行,结果出现代码中特意 print 的操作进程显示

4、数据库 tr_money 表执行后状态

总结

以上所述是小编给大家介绍的python 操作mysql 模拟银行转账,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Python2.7简单连接与操作MySQL的方法

    本文实例讲述了Python2.7简单连接与操作MySQL的方法.分享给大家供大家参考,具体如下: Python号称简单优雅,其实新手摆弄一些东西的时候还是挺麻烦的,比如使用Python2.7连接MySQL数据库时,真是有点麻烦.现将方法整理出来. 环境:Python2.7.2.MySQL5.5 1.安装MySQL驱动程序.下载自动安装包,双击安装即可,非常简单. 2.连接MySQL,下面是Python示例代码. # -*- coding: utf8 -*- import MySQLdb conn

  • python安装mysql-python简明笔记(ubuntu环境)

    本文讲述了python安装mysql-python的方法.分享给大家供大家参考,具体如下: ubuntu 系统下进行的操作 首先安装了pip工具 sudo apt-get install python-pip 然后使用 sudo pip install mysql-python 安装第三方库.但是此时报错 sh: mysql_config: not found Traceback (most recent call last): File "setup.py", line 15, in

  • Python如何读取MySQL数据库表数据

    本文实例为大家分享了Python读取MySQL数据库表数据的具体代码,供大家参考,具体内容如下 环境:Python 3.6 ,Window 64bit 目的:从MySQL数据库读取目标表数据,并处理 代码: # -*- coding: utf-8 -*- import pandas as pd import pymysql ## 加上字符集参数,防止中文乱码 dbconn=pymysql.connect( host="**********", database="kimbo&

  • Python3连接MySQL(pymysql)模拟转账实现代码

    本文实例为大家分享了Python3连接MySQL模拟转账的具体实现代码,供大家参考,具体内容如下 # coding:utf8 import sys import pymysql class TransferMoney(object): def __init__(self,conn): self.conn=conn def check_acct_available(self,acctid): cursor = self.conn.cursor() try: sql="select * from a

  • python3使用PyMysql连接mysql数据库实例

    python语言的3.x完全不向前兼容,导致我们在python2.x中可以正常使用的库,到了python3就用不了了.比如说mysqldb 目前MySQLdb并不支持python3.x , Python3.x连接MySQL的方案有:oursql, PyMySQL, myconnpy 等. 下面来说下python3如何安装和使用pymysql,另外两个方案我会在以后再讲. 1.pymysql安装 pymysql就是作为python3环境下mysqldb的替代物,进入命令行,使用pip安装pymys

  • Python的SQLalchemy模块连接与操作MySQL的基础示例

    一.SQLalchemy简介 SQLAlchemy是一个开源的SQL工具包,基本Python编程语言的MIT许可证而发布的对象关系映射器.SQLAlchemy提供了"一个熟知的企业级全套持久性模式,使用ORM等独立SQLAlchemy的一个优势在于其允许开发人员首先考虑数据模型,并能决定稍后可视化数据的方式. 二.SQLAlchempy的安装 首先需安装mysql,这里就不再多说了..... 然后,下载SQLAlchemy(http://www.sqlalchemy.org/download.h

  • Python中操作mysql的pymysql模块详解

    前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 本文测试python版本:2.7.11.mysql版本:5.6.24 一.安装 pip3 install pymysql 二.使用操作 1.执行SQL #!/usr/bin/env pytho # -*- coding:utf-8 -*- import pymysql # 创建连接 conn = pymysql.connect(host=

  • 让python 3支持mysqldb的解决方法

    前言 在新的一年里祝大家前端都用ES6,php都用PHP7,Java都是JAVA9,python都是3.好了,下面进入本文的主要的内容,大家可能在python2.x中用习惯了mysqldb,但是在python3.x中已经不支持那个组件了.如果还想要让python 3支持mysqldb该怎么办呢?下面来一起看看吧. 原因 MySQLdb 只适用于python2.x,发现pip装不上.它在py3的替代品是: import pymysql pip install pymysql django+mysq

  • python操作MySQL 模拟简单银行转账操作

    一.基础知识 1.MySQL-python的安装 下载,然后 pip install 安装包 2.python编写通用数据库程序的API规范 (1).数据库连接对象 connection,建立python客户端与数据库的网络连接,创建方法为 MySQLdb.Connect(参数) 参数有六个:     host(MySQL服务器地址,一般本地为127.0.0.1) port(MySQL服务器端口号)                             user(用户名)           

  • Python操作MySQL模拟银行转账

    今天在慕课网上学习了有关于python操作MySQL的相关知识,在此做些总结.python操作数据库还是相对比较简单的,由于python统一了各个数据库的接口程序,也就是所谓的Python DB,所以无论使用何种数据可,都可以用统一的接口对数据库进行操作.操作中主要涉及connection对象的操作和cursor的操作,前者主要是为了建立起python与数据库的数据交换通道,后者则是访问数据的游标,也可以理解为指针.数据库的相关结构化语言在Python中均是以字符串的形式呈现的.另外注意roll

  • Python使用Selenium模拟浏览器自动操作功能

    概述 在进行网站爬取数据的时候,会发现很多网站都进行了反爬虫的处理,如JS加密,Ajax加密,反Debug等方法,通过请求获取数据和页面展示的内容完全不同,这时候就用到Selenium技术,来模拟浏览器的操作,然后获取数据.本文以一个简单的小例子,简述Python搭配Tkinter和Selenium进行浏览器的模拟操作,仅供学习分享使用,如有不足之处,还请指正. 什么是Selenium? Selenium是一个用于Web应用程序测试的工具,Selenium测试直接运行在浏览器中,就像真正的用户在

  • python+tkinter+mysql做简单数据库查询界面

    目录 一.准备工作: 二.代码: 三.界面 四.总结 一.准备工作: 1.安装mysql3.7,创建一个test数据库,创建student表,创建列:(列名看代码),创建几条数据 (以上工作直接用navicat for mysql工具完成) 二.代码: import sys import tkinter as tk import mysql.connector as sql #--------------------查询函数--------------------------- def sql_

  • flask 框架操作MySQL数据库简单示例

    本文实例讲述了flask 框架操作MySQL数据库.分享给大家供大家参考,具体如下: 一.创建数据库表格 """ Created on 19-10-8 @requirement:Anaconda 4.3.0 (64-bit) Python3.6 @description:创建表格 """ import pymysql server = '127.0.0.1' user = 'root' password = 'password' # 连接数据库

  • Go语言操作mysql数据库简单例子

    Go语言操作数据库非常的简单, 他也有一个类似JDBC的东西"database/sql" 实现类是"github.com/go-sql-driver/mysql" 使用过JDBC的人应该一看就懂 对日期的处理比较晦涩,没有JAVA流畅: 复制代码 代码如下: package main import (     "database/sql"     _ "github.com/go-sql-driver/mysql"     &

  • node.js中 mysql 增删改查操作及async,await处理实例分析

    本文实例讲述了node.js中 mysql 增删改查操作及async,await处理.分享给大家供大家参考,具体如下: 要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = require('mysql'); //创建数据库连接 let conn = mysql.createConnection({ //主机地址 host: '127.0.0.1', //用户

  • 利用Python绘制MySQL数据图实现数据可视化

    本教程的所有Python代码可以在网上的IPython notebook中获取. 考虑在公司里使用Plotly?可以看一下Plotly的on-premises企业版.(注:On-premises是指软件运行在工作场所或公司内部,详见维基百科) 注意操作系统:尽管Windows或Mac用户也可以跟随本文操作,但本文假定你使用的是Ubuntu系统(Ubuntu桌面版或Ubuntu服务器版).如果你没有Ubuntu Server,你可以通过Amazon的Web服务建立一个云平台(阅读这份教程的前半部分

  • Python访问MySQL封装的常用类实例

    本文实例讲述了Python访问MySQL封装的常用类.分享给大家供大家参考.具体如下: python访问mysql比较简单,下面整理的就是一个很简单的Python访问MySQL数据库类. 自己平时也就用到两个mysql函数:查询和更新,下面是自己常用的函数的封装,大家拷贝过去直接可以使用. 文件名:DBUtil.py 复制代码 代码如下: # -*- encoding:utf8 -*- ''' @author: crazyant.net @version: 2013-10-22   封装的mys

  • python自动化实现的简单使用

    目录 环境配置 定位 1.Link_text定位超链接 2.混合元素定位 3.Xpath定位(通常) 4.css定位 操作 1.实现输入框自动输入 2.清空输入框 3.上传文件 4.自动化执行javaScript方法 5.浏览器窗口切换 6.切换ifame 7.alert窗口切换 8.模拟鼠标经过操作 9.模拟拖拽操作? 10.隐式等待? 11.显示等待? 测试 1.自动填写登录csdn 2.隐式登录百度地图? 环境配置 pycharm环境配置 下载chrome drives.exe,版本选择要

随机推荐