网站开发设计比较好的公司,电子烟网站设计,seo论坛的网址,flash 网站一、基础知识 1、MySQL-python的安装 下载#xff0c;然后 pip install 安装包 2、python编写通用数据库程序的API规范 #xff08;1#xff09;、数据库连接对象 connection#xff0c;建立python客户端与数据库的网络连接#xff0c;创建方法为 MySQLdb.Connect(参数) 参… 一、基础知识 1、MySQL-python的安装 下载然后 pip install 安装包 2、python编写通用数据库程序的API规范 1、数据库连接对象 connection建立python客户端与数据库的网络连接创建方法为 MySQLdb.Connect(参数) 参数有六个: hostMySQL服务器地址一般本地为127.0.0.1 portMySQL服务器端口号 user用户名 passwd密码 db数据库名称 charset连接编码 connection的方法: cursor使用该连接并返回游标 commit提交当前事务 rollback回滚当前事务 close关闭连接 2、数据库游标对象cursor用于执行查询和获取结果 方法executeop[,args]执行一个数据库查询 和 命令 fetchone取得结果集的下一行 fetchmanysize获取结果集的下几行 fetchall获取结果集中剩下的所有行 rowcount 最近一次execute返回数据的行数或影响行数 close关闭游标对象 connection与cursorconnection相当于python与MySQL之间的路而cursor相当于路上的运输车来传送命令与结果。 3、简单命令 select 查询数据sqlselect * 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 → 结束 二、模拟银行转账系统代码 [python] view plaincopy #codingutf-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): #使用与数据库的链接并返回游标 cursorself.conn.cursor() try: #数据库命令 sqlselect * from tr_money where acctid%s %source_acctid #执行命令 cursor.execute(sql) #为方便观察执行过程 print check_acct_available: sql #讲结果集放入变量result中若result不等于1则没有这个账号输出异常 resultcursor.fetchall() if len(result)!1: raise Exception(账号%s不存在 %source_acctid) finally: #若过程出现问题仍需要关闭游标对象 cursor.close() #### 2、检查减款人余额是否充足方法与上一个函数一样只是多加了一个money参数 ### def has_enough_money(self,source_acctid,money): cursorself.conn.cursor() try: sqlselect * from tr_money where acctid%s and money%s %(source_acctid,money) cursor.execute(sql) print has_enough_money: sql resultcursor.fetchall() if len(result)!1: raise Exception(账号%s余额不足 %source_acctid) finally: cursor.close() #### 3、减款操作 ### def reduce_money(self,source_acctid,money): cursorself.conn.cursor() try: #数据库命令减去对应减款人的金额数 sqlupdate tr_money set moneymoney-%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): cursorself.conn.cursor() try: sqlupdate tr_money set moneymoney%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_acctidsys.argv[1] # target_acctidsys.argv[2] # moneysys.argv[3] #建立与数据库的链接 conn MySQLdb.Connect( host127.0.0.1, port3306, userroot, passwd12345678, dbtt, charsetutf8 ) #手动输入减款人、收款人、转款数 source_acctidraw_input(请输入减款人 ) target_acctidraw_input(请输入收款人 ) moneyraw_input(请输入转款数 ) #将参数传入类中 tr_moneyTrans_for_Money(conn) try: tr_money.trans_for(source_acctid,target_acctid,money) except Exception as e: print出现问题str(e) finally: conn.close() #关闭链接 三、问题解决 [python] view plaincopy 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 表执行后状态