3.3.0 MySQL-数据库应用开发(Python篇)
第1关:Python的数据库API规范与数据库模块:简单查询
import pymysql
db = pymysql. connect( host= '127.0.0.1' ,
user= 'root' ,
password= '123123' ,
database= 'finance' ,
charset= 'utf8mb4' )
cursor = db. cursor( )
sql = "select c_name,c_mail,c_phone from client where c_mail is not null;"
cursor. execute( sql)
result = cursor. fetchall( )
print ( "姓名\t邮箱\t\t\t\t电话" )
for row in result:
print ( row[ 0 ] + "\t" + row[ 1 ] + "\t\t" + row[ 2 ] )
cursor. close( )
db. close( )
第2关:用户登录
import pymysql
db = pymysql. connect( host= '127.0.0.1' ,
user= 'root' ,
password= '123123' ,
database= 'finance' ,
charset= 'utf8mb4' )
c_mail= input ( "请输入用户名:" )
c_password= input ( "请输入密码:" )
sql= "select* from client where c_mail=%s and c_password=%s;"
val= ( c_mail, c_password)
cursor = db. cursor( )
cursor. execute( sql, val)
if cursor. rowcount == 1 :
print ( "登录成功。" )
else :
print ( "用户名或密码错误!" )
cursor. close( )
db. close( )
第3关:添加新客户
def connect ( ) :
conn = pymysql. connect(
host= '127.0.0.1' ,
user= 'root' ,
password= '123123' ,
database= 'finance' ,
charset= 'utf8mb4'
)
return conn
def add_client ( cid, cname, mail, idcard, phone, password) :
conn = connect( )
cursor = conn. cursor( )
sql = "INSERT INTO client VALUES (%s, %s, %s, %s, %s, %s)"
val = ( cid, cname, mail, idcard, phone, password)
cursor. execute( sql, val)
conn. commit( )
conn. close( )
import pymysql
for i in range ( 2 ) :
record = input ( ) . split( )
add_client( * record)
第4关:银行卡销户
def connect ( ) :
conn = pymysql. connect(
host= '127.0.0.1' ,
user= 'root' ,
password= '123123' ,
database= 'finance' ,
charset= 'utf8mb4'
)
return conn
def removeBankCard ( cid, cardNum) :
conn = connect( )
cursor = conn. cursor( )
sql = "DELETE FROM bank_card WHERE b_c_id = %s AND b_number = %s"
result = cursor. execute( sql, ( cid, cardNum) )
conn. commit( )
conn. close( )
if result > 0 :
print ( "已销卡数: 1" )
else :
print ( "销户失败,请检查客户编号或银行卡号!" )
import pymysql
for i in range ( 1 , 3 ) :
data = input ( )
cid, cardNum = data. split( )
removeBankCard( cid, cardNum)
第5关:客户修改密码
def connect ( ) :
conn = pymysql. connect(
host= '127.0.0.1' ,
user= 'root' ,
password= '123123' ,
database= 'finance' ,
charset= 'utf8mb4'
)
return conn
def passwd ( cmail, cpass, newpass) :
conn = connect( )
cursor = conn. cursor( )
cursor. execute( "SELECT * FROM client WHERE c_mail=%s" , ( cmail, ) )
result = cursor. fetchone( )
if result is None :
return 1
cursor. execute( "SELECT * FROM client WHERE c_mail=%s AND c_password=%s" , ( cmail, cpass) )
result = cursor. fetchone( )
if result is None :
return 2
try :
cursor. execute( "UPDATE client SET c_password=%s WHERE c_mail=%s" , ( newpass, cmail) )
conn. commit( )
return 3
except :
return 4
import pymysql
for i in range ( 1 , 5 ) :
cmail, cpass, newpass, confirm_newpass = input ( ) . split( )
if newpass != confirm_newpass:
print ( f'第 { i} 组:两次输入的密码不一致' )
else :
result = passwd( cmail, cpass, newpass)
if result == 1 :
print ( f'第 { i} 组:用户不存在' )
elif result == 2 :
print ( f'第 { i} 组:用户密码不正确' )
elif result == 3 :
print ( f'第 { i} 组:密码修改成功' )
else :
print ( f'第 { i} 组:密码修改异常' )
第6关:事务与转账操作
import pymysql
def connect ( ) :
conn = pymysql. connect(
host= '127.0.0.1' ,
user= 'root' ,
password= '123123' ,
database= 'finance' ,
charset= 'utf8mb4'
)
return conn
def transfer_money ( conn, src, dest, amount) :
cursor = conn. cursor( )
try :
conn. autocommit = False
sql = "UPDATE bank_card SET b_balance = b_balance - %s WHERE b_number = %s;"
cursor. execute( sql, ( amount, src) )
sql = "UPDATE bank_card SET b_balance = b_balance + %s WHERE b_number = %s AND b_type = '储蓄卡';"
cursor. execute( sql, ( amount, dest) )
sql = "UPDATE bank_card SET b_balance = b_balance - %s WHERE b_number = %s AND b_type = '信用卡';"
cursor. execute( sql, ( amount, dest) )
sql = "SELECT * FROM bank_card WHERE b_number = %s AND b_type = '储蓄卡';"
cursor. execute( sql, ( src, ) )
result = cursor. fetchone( )
if not result:
conn. rollback( )
return 1
else :
if result[ 3 ] < 0 :
conn. rollback( )
return 1
else :
sql = "SELECT * FROM bank_card WHERE b_number = %s;"
cursor. execute( sql, ( dest, ) )
result = cursor. fetchone( )
if not result:
conn. rollback( )
return 1
else :
conn. commit( )
return 0
except Exception as e:
print ( e)
conn. rollback( )
return 1
finally :
cursor. close( )
conn = connect( )
iteration = 1
for iteration in range ( 1 , 10 ) :
try :
input_data = input ( )
commands = input_data. split( " " )
payer_card = commands[ 0 ]
payee_card = commands[ 1 ]
amount = float ( commands[ 2 ] )
if transfer_money( conn, payer_card, payee_card, amount) == 0 :
print ( f"第 { iteration} 笔:转账成功" )
else :
print ( f"第 { iteration} 笔:转账失败,请核对卡号,卡类型及卡余额" )
iteration += 1
except Exception as e:
pass
第7关:把稀疏表格转为键值对存储
import pymysql
def connect ( ) :
conn = pymysql. connect(
host= '127.0.0.1' ,
user= 'root' ,
password= '123123' ,
database= 'sparsedb' ,
charset= 'utf8mb4'
)
return conn
def add_sc ( cursor, sno, colName, colValue) :
sql = "INSERT INTO sc (sno, col_name, col_value) VALUES (%s, %s, %s);"
val = ( sno, colName, colValue)
cursor. execute( sql, val)
db = connect( )
cursor = db. cursor( )
sql = "SELECT * FROM entrance_exam"
cursor. execute( sql)
result = cursor. fetchall( )
cursor. execute( "SHOW COLUMNS FROM entrance_exam" )
columns = [ col[ 0 ] for col in cursor. fetchall( ) ]
for row in result:
sno = row[ 0 ]
for i, colValue in enumerate ( row[ 1 : ] , start= 1 ) :
if colValue is not None :
colName = columns[ i]
add_sc( cursor, sno, colName, colValue)
db. commit( )
cursor. close( )
db. close( )