一、資料庫基礎用法
要先配置環境變數,然后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()
宣告:未經許可,不得轉載
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/379376.html
標籤:其他
