资讯专栏INFORMATION COLUMN

python大佬养成计划----win下对数据库的操作

wangtdgoodluck / 3215人阅读

摘要:数据库是在版本中用于连接服务器的一个库,中则使用。就是数据库表的结构。安全管理器返回表得格式列内容表得描述表头银行转账原账号向目标账号转账,数据写进数据库内。做此实验前,保证你有数据库里面有数据库表数据库表中有账号数据和金额数据。

数据库

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 pymysql
conn = 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 pymysql

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

前期准备

执行结束

数据库结果显示

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42442.html

相关文章

  • python大佬养成计划----JavaScript对html优化

    摘要:实现用鼠标点击下一页时,更换图片的功能。表格全选依次遍历所有的单选框,设置状态为选中如果状态为未选中,则设置所有的单选框为未选中状态依次遍历所有的单选框,设置状态为选中添加删除编号姓名性别年龄 切换图片 当我们浏览网页时,时常出现图片轮播场景。实现用鼠标点击‘下一页’时,更换图片的功能。 #当前目录下建立img目录,存放图片,图片命名格式img1.jpg 图片切...

    Lowky 评论0 收藏0
  • python大佬养成计划-----多进程

    摘要:多进程执行任务结束,创建进程和销毁进程是时间的,如果长度不够,会造成多线程快过多进程多线程执行任务结束,进程间通信生产者消费者模型与队列演示了生产者和消费者的场景。 进程 Python是运行在解释器中的语言,查找资料知道,python中有一个全局锁(GIL),在使用多进程(Thread)的情况下,不能发挥多核的优势。而使用多进程(Multiprocess),则可以发挥多核的优势真正地提...

    zhangfaliang 评论0 收藏0
  • python大佬养成计划----os,datetime,time模块补充

    摘要:是否则检验指定的对象是否存在。由于的模块实现主要调用库,所以各个平台可能有所不同。时间格式时间戳的方式通常来说,时间戳是指格林威治时间年月日时分秒北京时间年月日时分秒起至现在的总秒数。元组方式元组共有个元素,返回的函数主要有,,。 os模块 os模块提供了多数操作系统的功能接口函数。当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,...

    frank_fun 评论0 收藏0
  • python大佬养成计划----excel操作

    摘要:新型数据类型中存储系列数据,比较常见的数据类型有,除此之外,还有数据类型元组的只能通过访问,模块的子类不仅可以使用的访问,还可以通过的进行访问。可以将理解为中的结构,其首先将各个命名,然后对每个赋予数据。 namedtuple新型数据类型 Python中存储系列数据,比较常见的数据类型有list,除此之外,还有tuple数据类型.tuple元组的item只能通过index访问,coll...

    cpupro 评论0 收藏0
  • python大佬养成计划----HTML DOM

    摘要:定义了所有元素的对象和属性,以及访问它们的方法。换言之,是关于如何获取修改添加或删除元素的标准。根据标准,中所有内容都是节点。好比我有两个下拉列表,第一列表是选择省份,那么我选择某一个省份,那么另一个列表也会对应显示该省份的城市。 什么是DOM? DOM (Document Object Model) 译为文档对象模型,是 HTML 和 XML 文档的编程接口。HTML DOM 定义了...

    leejan97 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<