数据库
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
win系统安装mysql,详见数据库常见命令
- mysql -uroot -psheen 登陆数据库
- show databases; 显示所有的数据库
- create database sheen; 创建新的数据库sheen
- use sheen; 进入数据库sheen
- show tables; 显示sheen里的所有数据库表
- create table star(name varchar(30),age int); 创建新的数据库表star,
- desc star; 查看数据库表的格式
- insert into star VALUES('user1',10); 插入值
- select * from star; 显示star数据库表中的所有内容
- update star set age=11 where name='user1'; 更新star数据库表中user1的年龄为11
- delete from star where name='user1'; 删除star数据库表中的user1
- drop table star; 删除star数据库表
- drop database sheen; 删除数据库sheen
连接数据库
此处,保证你有一个名为'sheen'的数据库
import pymysql#这里注意python2需要导入数据库模块为mysqldb#python3需要导入数据库模块为pymysql#1.连接数据库conn = pymysql.connect(host='localhost',user='root',passwd='sheen', charset='utf8',autocommit=True) #指定操作主机,指定用户和密码,编码格式为'utf8'时,中文才可以显示,autocommit自动提交对数据库的操作#2.创建一个游标,用来向数据库发送指令cur = conn.cursor()#3.实现对数据库的增删改查##3.1选择需要操作的数据库conn.select_db('sheen')#3.2对数据库内容的增删改查try: #添加新的数据库表 # add_table = 'create table star(name varchar(30),age int)' #创建数据库表,内容有名字、年龄 # cur.execute(add_table) #执行数据库操作命令 #给数据库表添加值 # insert_sqli1 = 'insert into star VALUES ("user3", 100);' #给数据库表更新值 # insert_sqli2 = 'insert into star VALUES ("user4", 100);' #给数据库表更新值 # cur.execute(insert_sqli1) # cur.execute(insert_sqli2) #删除数据库表中的内容 # del_table_info = 'delete from star where name="user3"' # cur.execute(del_table_info) #批量对数据实现增删改 # users=[("user"+str(i),i)for i in range(100)] # insert_sqli3 = 'insert into star VALUES (%s,%s);' # cur.executemany(insert_sqli3,users) #批量添加信息,cur.executemany() #查看数据库表的信息 select_sql = 'select * from star;' result = cur.execute(select_sql) print('查看语句的返回结果:',result) #返回信息数目,查看语句的返回结果: 100 #查看数据库表的内容 # cur.fetchone类似与文件的操作f.readline, 每次只读取一条记录; print("此条信息:",cur.fetchone()) print("此条信息:",cur.fetchone()) print("此条信息:",cur.fetchone()) # cur.fetchmany, 类似于f.readlines, 返回的是一个元组; print("查看5条信息",cur.fetchmany(5)) #从游标位置向后 #cur.fetchall返回的是一个元组; print("第一次查找所有信息:",cur.fetchall()) cur.scroll(0,mode='absolute') #移动游标位置到数据库表头 print("第二次查找所有信息:",cur.fetchall()) cur.scroll(-10,mode='relative') #移动游标位置到数据库表倒数第10个的位置 print("最后10个信息:",cur.fetchall())except Exception as e: print("Failed:",e)else: print("Success")# 4. 先关闭游标cur.close()# 5. 关闭数据库连接conn.close()
创建数据库表并添加值
删除指定值批量管理查看获取数据库表信息
获取表得字段名和表头
字段名是指在以关系模型为数据结构的二维表中每一列的标识。就是数据库表的结构。表头是可以用来索引的键值。import pymysqlconn = pymysql.connect(host='localhost',user='root',passwd='sheen', charset='utf8',autocommit=True,db='sheen')with conn: #安全管理器 print("is_open:",conn.open) #Return True if the connection is open cur = conn.cursor() res = cur.execute('select * from star;') desc = cur.description #返回表得格式列内容(('name', 253, None, 30, 30, 0, True), ('age', 3, None, 11, 11, 0, True)) print("表得描述:",desc) print("表头:",','.join([item[0] for item in desc])) cur.close()
银行转账
原账号向目标账号转账,数据写进数据库内。
做此实验前,保证你有数据库transinfo,里面有数据库表bankdata,数据库表中有账号数据和金额数据。import pymysqlclass Trans_money(object): def __init__(self,source_id,target_id,count): self.source = source_id self.target = target_id self.count = count self.conn = pymysql.connect(host='localhost',user='root',passwd='sheen', charset='utf8',db='transinfo') #建立数据库连接 self.cur = self.conn.cursor() #建立游标 def transfer_money(self): """ 转账方法: # 1. source_id帐号是否存在; # 2. target_id帐号是否存在; # 3. 是否有足够的钱 # 4. source_id扣钱 # 5. target_id加钱 # 6. 提交对数据库的操作 """ self.check_account(self.source) # 1. source_id帐号是否存在; self.check_account(self.target) # 2. target_id帐号是否存在; self.enough_money(self.source,self.count) # 3. 是否有足够的钱 try: self.reduce_source(self.count) # 4. source_id扣钱 self.increase_source(self.count) # 5. target_id加钱 self.conn.commit() # 6. 提交对数据库的操作 except Exception as e: self.conn.rollback() #撤销对于数据库的更改操作, 回滚 else: print("转账成功") def check_account(self,account): #判断原账户是否存在 check_sql = 'select * from bankdata where account=%s;' %(account) res = self.cur.execute(check_sql) if res ==1: return True else: print("%s此账号不存在" %(account)) def enough_money(self,account,money): #判断原账户是否有足够的钱 affirm_sql = 'select money from bankdata where account=%s;' %(self.source) re = self.cur.execute(affirm_sql) #返回1,游标位置在money exist_money = self.cur.fetchone()[0] #查看金额数目 print("您的账号有%s元" %(exist_money)) if exist_money>=money: return True else: raise Exception("您的账号%s没有足够的金额,当前余额为%s" %(self.source,exist_money)) def reduce_source(self,money): #扣钱函数 try: update_sql = 'update bankdata set money=money-%s where account=%s;' %(money,self.source) self.cur.execute(update_sql) except Exception as e: print("Failed:",e) def increase_source(self,money): #加钱函数 try: update_sql = 'update bankdata set money=money+%s where account=%s;' %(money,self.target) self.cur.execute(update_sql) except Exception as e: print("Failed:",e)if __name__=='__main__': tran = Trans_money('6107001','6107002',500) tran.transfer_money()
前期准备
执行结束数据库结果显示