Python中数据库连接

一 连接数据库步骤

import pymysql
#1.连接数据库(host,user,passwd.charset)
conn=pymysql.connect(host='172.25.254.74',user='root',
                     passwd='redhat',charset='utf8',autocommit=True)
#2.创建一个游标,用来给数据库发送sql语句
cur=conn.cursor()
#3.对于数据库实现增删改查操作
#选择需要的数据库
conn.select_db('westos')
try:
    #要执行的sql
    create_sql='create table myuser (name varchar(20),age int);'
    #delete_sql
    #update_sql
    cur.execute(create_sql)
    insert_sqli1='insert into myuser values ("user3",100);'
    insert_sqli2='insert into myuser values ("user4",101);'
    cur.execute(insert_sqli1)
    cur.execute(insert_sqli2)
    delete_sqli='delete from myuser where name="user3";'
    cur.execute(delete_sqli)
    #提交所有对数据库的操作
    conn.commit()
    #批量对数据实现增删改查
    users=[('user'+str(i),i) for i in range(10)]
    insert_sqli='insert into myuser values (%s,%s);'
    select_sqli='select * from myuser;'
    res=cur.execute(select_sqli)
    print('查看语句的返回结果:',res)
    #查看表中的数据
    #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('查找1所有记录:',cur.fetchall())
    #移动游标的位置,到记录的最开始
    cur.scroll(0,mode='absolute')
    print('查找2所有记录:',cur.fetchall())
    cur.scroll(-10,mode='relative')
    print('查找2所有记录:',cur.fetchall())
except Exception as e:
    print('Fail:',e)
else:
    print('Success')
#4.先关闭游标
cur.close()
#5.关闭数据库连接
conn.close()

executemany( )函数
excutemany是批量操作,通过这个函数将所需要插入的信息一次性插入,节省时间。

    users = [('user'+str(i), i) for i in range(100)]
    insert_sqli = 'insert into myuser VALUES (%s, %s);'
    cur.executemany(insert_sqli, users)

在这里插入图片描述

数据库中的描述

在这里插入图片描述

二 获取表的字段名和信息

在这里插入图片描述
在这里插入图片描述

银行转账案例

要求用数据库实现A给B转账之后,A拥有的金额减小,B拥有的金额增加,若出现意外,转账作废

import pymysql
class Transfermoney(object):
    def __init__(self,conn):
        self.conn=conn
        self.cursor=conn.cursor()
    def transfer(self,source_accid,target_accid,money):
        """
               转账方法:
                   # 1. source_accid帐号是否存在;
                   # 2. target_accid帐号是否存在;
                   # 3. 是否有足够的钱
                   # 4. source_accid扣钱
                   # 5. target_acci加钱
                   # 6. 提交对数据库的操作
               :param source_accid: 源帐号id
               :param target_accid: 目标帐号id
               :param money: 转账金额
               :return: bool
               """
        #判断帐号是否存在
        self.check_account_avaiable(source_accid)
        self.check_account_avaiable(target_accid)
        #是否有足够的钱
        self.has_enough_money(source_accid)
        try:
            #source_accid扣钱
            self.reduce_money(source_accid,money)
            print(a)
            #target_accid加钱
            self.add_money=(target_accid,money)
            self.conn.commit()
        except Exception as e:
             self.conn.commit()
        else:
                print('%s给%s转账%s成功' %(source_accid,target_accid,money))
    def check_account_avaiable(self,accid):
        """判断帐号是否存在,传递参数为帐号id"""
        select_sqli='select * from bankData where id=%s' %(accid)
        print('execute sql:',select_sqli)
        res=self.cursor.execute(select_sqli)
        #判断是否能找到帐号为accid的记录
        if res==1:
            return True
        else:
            raise Exception('帐号%s不存在' %(accid))
    def has_enough_money(self,accid,money):
        """是否有足够的钱"""
        select_sqli='select money from bankData where id=%s' %(accid)
        print('execute sql:',select_sqli)
        self.cursor.execute(select_sqli)
        #获取查询到的金钱数额
        acc_money=self.cursor.fetchone()[0]
        print(acc_money,type(acc_money))
        #判断
        if acc_money>=money:
            return True
        else:
            raise Exception('账户%s没有足够的金额,当前余额%s' %(accid,money))
    def reduce_money(self,accid,money):
        #对于accid减少的金额为money
        try:
            update_sqli='update bankData set money=money-%s where id=%s' %(money,accid)
            print('reduce_money sql:',update_sqli)
            self.cursor.execute(update_sqli)
        except Exception as e:
            print('Error:',e)
    def add_money(self,accid,money):
        #对于accid增加的金额为money
        try:
            update_sqli='update bankData set money=money+%s where id=%s' %(money,accid)
            print('add_money sql:',update_sqli)
            self.cursor.execute(update_sqli)
        except Exception as e:
            print('Error:',e)
    def __del__(self):
        #删除对象时,自动执行,关闭游标
        self.cursor.close()
if __name__=='__main__':
    conn=pymysql.connect(host='172.25.254.74',user='hello',
                         passwd='hello',charset='utf8',db='westos')
    trans=Transfermoney(conn)
    trans.transfer('610003','610002,100')

def create_data():
    #1.连接数据库,host,user,passwd,charset
    conn=pymysql.connect(host='172.25.254.74',user='hello',
                         passwd='hello',charset='utf8',
                         autocommit=True,db='westos')
    #2.创建一个游标,用来给数据库发送sql语句
    cur=conn.cursor()
    #3.创建一个表
    try:
        create_sqli='create table bankData(id int PRIMARY KEY,' \
        'name varchar(10),money FLOAT);'
        cur.execute(create_sqli)
    except Exception as e:
        print('Error:表已经创建',e)
    else:
        print('表创建成功')
    #4.创建数据
    try:
        users=[(610001,'张三',1000),(610002,'李四',1000),(610003,'粉条',1000)]
        insert_sqli='insert into bankData VALUES (%s %s %s);'
        cur.executemany(insert_sqli,users)
    except Exception as e:
        print('Error:',e)
    else:
        print('初始化数据成功')
    #4.先关闭游标
    cur.close()
    #5.关闭数据库连接
    conn.close()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值