一 连接数据库步骤
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()