博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python大佬养成计划----win下对数据库的操作
阅读量:5871 次
发布时间:2019-06-19

本文共 5577 字,大约阅读时间需要 18 分钟。

数据库

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()

前期准备

图片描述
执行结束
图片描述
数据库结果显示
图片描述

转载地址:http://nahnx.baihongyu.com/

你可能感兴趣的文章
Android 网络编程 记录
查看>>
微软同步发行Windows 10和Windows 10 Mobile系统更新
查看>>
Maven 传递依赖冲突解决(了解)
查看>>
Zeppelin的入门使用系列之使用Zeppelin运行shell命令(二)
查看>>
关于Unity中ARPG游戏人物移动(专题十一)
查看>>
studio导入Eclipse 项目要改的文件
查看>>
HtmlAgilityPack 详细使用
查看>>
安装kali linux 2017.1 【二、安装VMware-tools 以及相关问题处理】
查看>>
Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor...
查看>>
jqGrid时间转换
查看>>
SQL Server日期时间格式转换字符串详解
查看>>
vuex 中关于 mapState 的作用
查看>>
[Spark][Python]Spark Join 小例子
查看>>
form表单下的button按钮会自动提交表单的问题
查看>>
大战设计模式【11】—— 模板方法模式
查看>>
springBoot介绍
查看>>
Intellij IDEA 快捷键整理
查看>>
Redis 通用操作2
查看>>
性能优化——统计信息——SQLServer自动更新和自动创建统计信息选项
查看>>
11. Spring Boot JPA 连接数据库
查看>>