一、数据库基础用法

要先配置环境变量,然后cmd安装:pip install pymysql

1、连接MySQL,并创建wzg库

#引入decimal模块
import pymysql #连接数据库
db=pymysql.connect(host='localhost',user='root',password='1234',charset='utf8') #创建一个游标对象(相当于指针)
cursor=db.cursor() #执行创建数据库语句
cursor.execute('create schema wzg default charset=utf8;')
cursor.execute('show databases;') #fetchone获取一条数据(元组类型)
print(cursor.fetchone())
#现在指针到了[1]的位置 #fetchall获取全部数据(字符串类型)
all=cursor.fetchall()
for i in all:
print(i[0]) #关闭游标和数据库连接
cursor.close()
db.close()

2、创建student表,并插入数据

import pymysql

#连接数据库,并打开wzg数据库(数据库已创建)
db=pymysql.connect(host='localhost',user='root',password='1234',charset='utf8',db='wzg') #创建游标对象
cursor=db.cursor() try:
#创建student表,并执行
sql='''create table student(
SNO char(10),
SNAME varchar(20) NOT NULL,
SSEX varchar(1),
primary key(SNO)
)default charset=utf8;'''
cursor.execute(sql) #插入一条数据,并执行
insert_sql='''
insert into student values('200303016','王智刚','男'),('20030001','小明','男')
'''
cursor.execute(insert_sql) #将数据提交给数据库(加入数据,修改数据要先提交)
db.commit() #执行查询语句
cursor.execute('select * from student') #打印全部数据
all=cursor.fetchall()
for i in all:
print(i) #发生错误时,打印报错原因
except Exception as e:
print(e) #无论是否报错都执行
finally:
cursor.close()
db.close()

数据库中char和varchar的区别:

char类型的长度是固定的,varchar的长度是可变的。

例如:存储字符串'abc',使用char(10),表示存储的字符将占10个字节(包括7个空字符),

使用varchar(10),表示只占3个字节,10是最大值,当存储的字符小于10时,按照实际的长度存储。

二、项目:银行管理系统

完成功能:1.查询 2.取钱 3.存钱 4.退出

练习:创建信息表,并进行匹配

1、创建数据库为(bank),账户信息表为(account)

account_id(varchar(20)) Account_passwd(char(6)) Money(decimal(10,2))
001 123456 1000.00
002 456789 5000.00

2、拓展:进行账号和密码的匹配

请输入账号:001

请输入密码:123456

select * from account where account_id=001 and Account_passwd=123456

if cursor.fetchall():

登录成功

else:

登录失败

import pymysql

# 连接数据库
db = pymysql.connect(host='localhost', user='root', password='1234', charset='utf8')
cursor = db.cursor() # 创建bank库
cursor.execute('create database bank charset utf8;')
cursor.execute('use bank;') try:
# # 创建表
# sql = '''create table account(
# account_id varchar(20) NOT NULL,
# account_passwd char(6) NOT NULL,
# money decimal(10,2),
# primary key(account_id)
# );'''
# cursor.execute(sql) # # 插入数据
# insert_sql = '''
# insert into account values('001','123456',1000.00),('002','456789',5000.00)
# '''
# cursor.execute(insert_sql)
# db.commit() # # 查询所有数据
# cursor.execute('select * from account')
# all = cursor.fetchall()
# for i in all:
# print(i) # 输入账号和密码
z=input("请输入账号:")
m=input("请输入密码:") # 从account表中进行账号和密码的匹配
cursor.execute('select * from account where account_id=%s and account_passwd=%s',(z,m)) # 如果找到,则登录成功
if cursor.fetchall():
print('登录成功')
else:
print('登录失败') except Exception as e:
print(e) finally:
cursor.close()
db.close()

1、进行初始化操作

import pymysql

# 创建bank库
CREATE_SCHEMA_SQL='''
create schema bank charset utf8;
''' # 创建account表
CREATE_TABLE_SQL = '''
create table account(
account_id varchar(20) NOT NULL,
account_passwd char(6) NOT NULL,
# decimal用于保存精确数字的类型,decimal(10,2)表示总位数最大为12位,其中整数10位,小数2位
money decimal(10,2),
primary key(account_id)
) default charset=utf8;
''' # 创建银行账户
CREATE_ACCOUNT_SQL = '''
insert into account values('001','123456',1000.00),('002','456789',5000.00);
''' # 初始化
def init():
try:
DB = pymysql.connect(host='localhost',user='root',password='1234',charset='utf8')
cursor1 = DB.cursor()
cursor1.execute(CREATE_SCHEMA_SQL)
DB = pymysql.connect(host='localhost',user='root',password='1234',charset='utf8',database='bank')
cursor2 = DB.cursor()
cursor2.execute(CREATE_TABLE_SQL)
cursor2.execute(CREATE_ACCOUNT_SQL)
DB.commit()
print('初始化成功') except Exception as e:
print('初始化失败',e) finally:
cursor1.close()
cursor2.close()
DB.close() # 不让别人调用
if __name__ == "__main__":
init()

2、登录检查,并选择操作

import pymysql

# 定义全局变量为空
DB=None # 创建Account类
class Account():
# 传入参数
def __init__(self,account_id,account_passwd):
self.account_id=account_id
self.account_passwd=account_passwd # 登录检查
def check_account(self):
cursor=DB.cursor()
try:
# 把输入账号和密码进行匹配(函数体内部传入参数用self.)
SQL="select * from account where account_id=%s and account_passwd=%s" %(self.account_id,self.account_passwd)
cursor.execute(SQL) # 匹配成功返回True,失败返回False
if cursor.fetchall():
return True
else:
return False except Exception as e:
print("错误原因:",e)
finally:
cursor.close() # 查询余额
# def query_money # 取钱
# def reduce_money # 存钱
# def add_money def main():
# 定义全局变量
global DB # 连接bank库
DB=pymysql.connect(host="localhost",user="root",passwd="1234",database="bank")
cursor=DB.cursor() # 输入账号和密码
from_account_id=input("请输入账号:")
from_account_passwd=input("请输入密码:") # 输入的参数传入给Account类,并创建account对象
account=Account(from_account_id,from_account_passwd) # 调用check_account方法,进行登录检查
if account.check_account():
choose=input("请输入操作:\n1、查询余额\n2、取钱\n3、存钱\n4、取卡\n")
# 当输入不等于4的时候执行,等于4则退出
while choose!="4":
# 查询
if choose=="1":
print("111")
# 取钱
elif choose=="2":
print("222")
# 存钱
elif choose=="3":
print("333")
# 上面操作完成之后,继续输入其他操作
choose = input("请输入操作:\n1、查询余额\n2、取钱\n3、存钱\n4、取卡\n")
else:
print("谢谢使用!")
else:
print("账号或密码错误")
DB.close()
main()

3、加入查询功能

存在银行里的钱可能会产生利息,所以需要考虑余额为小数的问题,需要用到decimal库

import pymysql
# 引入decimal模块
import decimal
DB=None
class Account(): def __init__(self,account_id,account_passwd):
self.account_id=account_id
self.account_passwd=account_passwd # 登录检查
def check_account(self):
cursor=DB.cursor()
try:
SQL="select * from account where account_id=%s and account_passwd=%s" %(self.account_id,self.account_passwd)
cursor.execute(SQL)
if cursor.fetchall():
return True
else:
return False
except Exception as e:
print("错误",e)
finally:
cursor.close() # 查询余额
def query_money(self):
cursor=DB.cursor()
try:
# 匹配账号密码,并返回money
SQL="select money from account where account_id=%s and account_passwd=%s" %(self.account_id,self.account_passwd)
cursor.execute(SQL)
money=cursor.fetchone()[0]
# 如果账户有钱就返回金额,没钱返回0.00
if money:
# 返回值为decimal类型,quantize函数进行四舍五入,'0.00'表示保留两位小数
return str(money.quantize(decimal.Decimal('0.00')))
else:
return 0.00
except Exception as e:
print("错误原因",e)
finally:
cursor.close() def main():
global DB
DB=pymysql.connect(host="localhost",user="root",passwd="1234",charset="utf8",database="bank")
cursor=DB.cursor()
from_account_id=input("请输入账号:")
from_account_passwd=input("请输入密码:")
account=Account(from_account_id,from_account_passwd)
if account.check_account():
choose=input("请输入操作:\n1、查询余额\n2、取钱\n3、存钱\n4、取卡\n")
while choose!="4":
# 查询
if choose=="1":
# 调用query_money方法
print("您的余额是%s元" % account.query_money())
# 取钱
elif choose=="2":
print("222")
# 存钱
elif choose=="3":
print("333")
choose = input("请输入操作:\n1、查询余额\n2、取钱\n3、存钱\n4、取卡\n")
else:
print("谢谢使用")
else:
print("账号或密码错误")
DB.close()
main()

4、加入取钱功能

取钱存钱要用update来执行数据库,还要注意取钱需要考虑余额是否充足的问题

import pymysql
import decimal
DB=None
class Account(): def __init__(self,account_id,account_passwd):
self.account_id=account_id
self.account_passwd=account_passwd # 登录检查
def check_account(self):
cursor=DB.cursor()
try:
SQL="select * from account where account_id=%s and account_passwd=%s" %(self.account_id,self.account_passwd)
cursor.execute(SQL)
if cursor.fetchall():
return True
else:
return False
except Exception as e:
print("错误",e)
finally:
cursor.close() # 查询余额
def query_money(self):
cursor=DB.cursor()
try:
SQL="select money from account where account_id=%s and account_passwd=%s" %(self.account_id,self.account_passwd)
cursor.execute(SQL)
money=cursor.fetchone()[0]
if money:
return str(money.quantize(decimal.Decimal('0.00')))
else:
return 0.00
except Exception as e:
print("错误原因",e)
finally:
cursor.close() # 取钱(注意传入money参数)
def reduce_money(self,money):
cursor = DB.cursor()
try:
# 先调用query_money方法,查询余额
has_money=self.query_money() # 所取金额小于余额则执行(注意类型转换)
if decimal.Decimal(money) <= decimal.Decimal(has_money): # 进行数据更新操作
SQL="update account set money=money-%s where account_id=%s and account_passwd=%s" %(money,self.account_id,self.account_passwd)
cursor.execute(SQL) # rowcount进行行计数,行数为1则将数据提交给数据库
if cursor.rowcount==1:
DB.commit()
return True
else:
# rollback数据库回滚,行数不为1则不执行
DB.rollback()
return False
else:
print("余额不足")
except Exception as e:
print("错误原因",e)
finally:
cursor.close() # 存钱
# def add_money def main():
global DB
DB=pymysql.connect(host="localhost",user="root",passwd="1234",charset="utf8",database="bank")
cursor=DB.cursor()
from_account_id=input("请输入账号:")
from_account_passwd=input("请输入密码:")
account=Account(from_account_id,from_account_passwd)
if account.check_account():
choose=input("请输入操作:\n1、查询余额\n2、取钱\n3、存钱\n4、取卡\n")
while choose!="4":
# 查询
if choose=="1":
print("您的余额是%s元" % account.query_money())
# 取钱
elif choose=="2":
# 先查询余额,再输入取款金额,防止取款金额大于余额
money=input("您的余额是%s元,请输入取款金额" % account.query_money())
# 调用reduce_money方法,money不为空则取款成功
if account.reduce_money(money):
print("取款成功,您的余额还有%s元" % account.query_money())
else:
print("取款失败!")
# 存钱
elif choose=="3":
print("333")
choose = input("请输入操作:\n1、查询余额\n2、取钱\n3、存钱\n4、取卡\n")
else:
print("谢谢使用!")
else:
print("账号或密码错误")
DB.close()
main()

5、加入存钱功能

存钱功能和取钱功能相似,而且不需要考虑余额的问题,至此已完善当前所有功能

import pymysql
import decimal
DB=None
class Account():
def __init__(self,account_id,account_passwd):
self.account_id=account_id
self.account_passwd=account_passwd # 登录检查
def check_account(self):
cursor=DB.cursor()
try:
SQL="select * from account where account_id=%s and account_passwd=%s" %(self.account_id,self.account_passwd)
cursor.execute(SQL)
if cursor.fetchall():
return True
else:
return False
except Exception as e:
print("错误",e)
finally:
cursor.close() # 查询余额
def query_money(self):
cursor=DB.cursor()
try:
SQL="select money from account where account_id=%s and account_passwd=%s" %(self.account_id,self.account_passwd)
cursor.execute(SQL)
money=cursor.fetchone()[0]
if money:
return str(money.quantize(decimal.Decimal('0.00')))
else:
return 0.00
except Exception as e:
print("错误原因",e)
finally:
cursor.close() # 取钱
def reduce_money(self,money):
cursor = DB.cursor()
try:
has_money=self.query_money()
if decimal.Decimal(money) <= decimal.Decimal(has_money):
SQL="update account set money=money-%s where account_id=%s and account_passwd=%s" %(money,self.account_id,self.account_passwd)
cursor.execute(SQL)
if cursor.rowcount==1:
DB.commit()
return True
else:
DB.rollback()
return False
else:
print("余额不足")
except Exception as e:
print("错误原因",e)
finally:
cursor.close() # 存钱
def add_money(self,money):
cursor = DB.cursor()
try:
SQL="update account set money=money+%s where account_id=%s and account_passwd=%s" %(money,self.account_id,self.account_passwd)
cursor.execute(SQL)
if cursor.rowcount==1:
DB.commit()
return True
else:
DB.rollback()
return False
except Exception as e:
DB.rollback()
print("错误原因",e)
finally:
cursor.close() def main():
global DB
DB=pymysql.connect(host="localhost",user="root",passwd="1234",charset="utf8",database="bank")
cursor=DB.cursor()
from_account_id=input("请输入账号:")
from_account_passwd=input("请输入密码:")
account=Account(from_account_id,from_account_passwd)
if account.check_account():
choose=input("请输入操作:\n1、查询余额\n2、取钱\n3、存钱\n4、取卡\n")
while choose!="4":
# 查询
if choose=="1":
print("您的余额是%s元" % account.query_money())
# 取钱
elif choose=="2":
money=input("您的余额是%s元,请输入取款金额" % account.query_money())
if account.reduce_money(money):
print("取款成功,您的余额还有%s元" % account.query_money())
else:
print("取款失败!")
# 存钱
elif choose=="3":
money=input("请输入存款金额:")
if account.add_money(money):
print("存款成功,您的余额还有%s元,按任意键继续\n" % (account.query_money()))
else:
print("存款失败,按任意键继续")
choose = input("请输入操作:\n1、查询余额\n2、取钱\n3、存钱\n4、取卡\n")
else:
print("谢谢使用!")
else:
print("账号或密码错误")
DB.close()
main()

声明:未经许可,不得转载

Python——连接数据库操作的更多相关文章

  1. python 连接数据库操作

    import mysql #打开数据库连接(用户名,密码,数据库名) db = mysql.connect("localhost","testuser",&qu ...

  2. python数据库操作之pymysql模块和sqlalchemy模块(项目必备)

    pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 1.下载安装 pip3 install pymysql 2.操作数据库 (1).执行sql #! ...

  3. python/ORM操作详解

    一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...

  4. Python中操作ini配置文件

    这篇博客我主要想总结一下python中的ini文件的使用,最近在写python操作mysql数据库,那么作为测试人员测试的环境包括(测试环境,UAT环境,生产环境)每次需要连接数据库的ip,端口,都会 ...

  5. python27期python连接数据库:

    import pymysql创建connectinon对象:con = pymysql.connect(host = "localhost",user = "root&q ...

  6. python连接数据库自动发邮件

    python连接数据库实现自动发邮件 1.运行环境 redhat6 + python3.6 + crontab + Oracle客户端 2.用到的模块  3.操作步骤 (1)安装python3.6参考 ...

  7. Python连接数据库流行用到的第三方库

    Python连接数据库流行用到的第三方库: mysqldb:只支持Python2.x mysqlclient : mysqldb的衍生版本,完全兼容mysqldb,同时支持Python3.x,安装较复 ...

  8. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  9. Python 字符串操作

    Python 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) 去空格及特殊符号 s.strip() .lstrip() .rstrip(',') 复制字符 ...

随机推荐

  1. C# 判断未将对象引用设置到对象的实例,出错的代码到底在第几行

    DataTable dt = null; try { var x = dt.Rows.Count; } catch(NullReferenceException nullexception) { Me ...

  2. [atARC083F]Collecting Balls

    考虑一个构造,对于坐标$(x,y)$,连一条$x$到$y$的边(注意:横坐标和纵坐标即使权值相同也是不同的点),之后每一个连通块独立,考虑一个连通块内部: 每一个点意味着一次删除操作,每一个边意味着一 ...

  3. Java设计模式之(七)——装饰器模式

    1.什么是装饰器模式? Attach additional responsibilities to an object dynamically keeping the same interface.D ...

  4. Python学习手册——第二部分 类型和运算(1)之字符串

    Python全景 1.程序由模块构成. 2.模块包含语句. 3.语句包含表达式. 4.表达式建立并处理对象. 在python中数据是以对象的形式出现的!!! 为什么使用内置类型 内置对象使程序更容易编 ...

  5. HCNP Routing&Switching之组播技术-组播地址

    前文我们聊到了组播技术背景,单播.广播在点到多点应用中的问题,以及组播对比单播.广播在点到多点的网络环境中的优势.劣势,相关回顾请参考https://www.cnblogs.com/qiuhom-18 ...

  6. Yarp 让系统内调度更灵活

    简介 Yarp 是微软团队开发的一个反向代理组件, 除了常规的 http 和 https 转换通讯,它最大的特点是可定制化,很容易根据特定场景开发出需要的定制代理通道. 详细介绍:https://de ...

  7. 洛谷 P4240 - 毒瘤之神的考验(数论+复杂度平衡)

    洛谷题面传送门 先扯些别的. 2021 年 7 月的某一天,我和 ycx 对话: tzc:你做过哪些名字里带"毒瘤"的题目,我做过一道名副其实的毒瘤题就叫毒瘤,是个虚树+dp yc ...

  8. C++ and OO Num. Comp. Sci. Eng. - Part 1.

    本文参考自 <C++ and Object-Oriented Numeric Computing for Scientists and Engineers>. 序言 书中主要讨论的问题是面 ...

  9. Oracle——创建多个实例(数据库)、切换实例、登录数据库实例

    oracle中怎么创建多个实例? 其实很简单,怎么创建第一个实例,其他实例应该也怎么创建. 我的理解其实在linux中的oracle数据库中创建一个实例,实际上就是创建一个新的数据库,只是实例名字不同 ...

  10. nginx_rewrite

    介绍: 和apache等web服务软件一样,rewrite的组要功能是实现RUL地址的重定向.Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的.默认 ...