Python MySQL數(shù)據(jù)庫基本操作及項目示例詳解
一、數(shù)據(jù)庫基礎(chǔ)用法
要先配置環(huán)境變量,然后cmd安裝:pip install pymysql
1、連接MySQL,并創(chuàng)建wzg庫
#引入decimal模塊
import pymysql
#連接數(shù)據(jù)庫
db=pymysql.connect(host='localhost',user='root',password='1234',charset='utf8')
#創(chuàng)建一個游標(biāo)對象(相當(dāng)于指針)
cursor=db.cursor()
#執(zhí)行創(chuàng)建數(shù)據(jù)庫語句
cursor.execute('create schema wzg default charset=utf8;')
cursor.execute('show databases;')
#fetchone獲取一條數(shù)據(jù)(元組類型)
print(cursor.fetchone())
#現(xiàn)在指針到了[1]的位置
#fetchall獲取全部數(shù)據(jù)(字符串類型)
all=cursor.fetchall()
for i in all:
print(i[0])
#關(guān)閉游標(biāo)和數(shù)據(jù)庫連接
cursor.close()
db.close()
2、創(chuàng)建student表,并插入數(shù)據(jù)
import pymysql
#連接數(shù)據(jù)庫,并打開wzg數(shù)據(jù)庫(數(shù)據(jù)庫已創(chuàng)建)
db=pymysql.connect(host='localhost',user='root',password='1234',charset='utf8',db='wzg')
#創(chuàng)建游標(biāo)對象
cursor=db.cursor()
try:
#創(chuàng)建student表,并執(zhí)行
sql='''create table student(
SNO char(10),
SNAME varchar(20) NOT NULL,
SSEX varchar(1),
primary key(SNO)
)default charset=utf8;'''
cursor.execute(sql)
#插入一條數(shù)據(jù),并執(zhí)行
insert_sql='''
insert into student values('200303016','王智剛','男'),('20030001','小明','男')
'''
cursor.execute(insert_sql)
#將數(shù)據(jù)提交給數(shù)據(jù)庫(加入數(shù)據(jù),修改數(shù)據(jù)要先提交)
db.commit()
#執(zhí)行查詢語句
cursor.execute('select * from student')
#打印全部數(shù)據(jù)
all=cursor.fetchall()
for i in all:
print(i)
#發(fā)生錯誤時,打印報錯原因
except Exception as e:
print(e)
#無論是否報錯都執(zhí)行
finally:
cursor.close()
db.close()
數(shù)據(jù)庫中char和varchar的區(qū)別:
char類型的長度是固定的,varchar的長度是可變的。
例如:存儲字符串'abc',使用char(10),表示存儲的字符將占10個字節(jié)(包括7個空字符),
使用varchar(10),表示只占3個字節(jié),10是最大值,當(dāng)存儲的字符小于10時,按照實際的長度存儲。
二、項目:銀行管理系統(tǒng)
完成功能:1.查詢 2.取錢 3.存錢 4.退出
練習(xí):創(chuàng)建信息表,并進行匹配
1、創(chuàng)建數(shù)據(jù)庫為(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
# 連接數(shù)據(jù)庫
db = pymysql.connect(host='localhost', user='root', password='1234', charset='utf8')
cursor = db.cursor()
# 創(chuàng)建bank庫
cursor.execute('create database bank charset utf8;')
cursor.execute('use bank;')
try:
# # 創(chuàng)建表
# 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)
# # 插入數(shù)據(jù)
# insert_sql = '''
# insert into account values('001','123456',1000.00),('002','456789',5000.00)
# '''
# cursor.execute(insert_sql)
# db.commit()
# # 查詢所有數(shù)據(jù)
# 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
# 創(chuàng)建bank庫
CREATE_SCHEMA_SQL='''
create schema bank charset utf8;
'''
# 創(chuàng)建account表
CREATE_TABLE_SQL = '''
create table account(
account_id varchar(20) NOT NULL,
account_passwd char(6) NOT NULL,
# decimal用于保存精確數(shù)字的類型,decimal(10,2)表示總位數(shù)最大為12位,其中整數(shù)10位,小數(shù)2位
money decimal(10,2),
primary key(account_id)
) default charset=utf8;
'''
# 創(chuàng)建銀行賬戶
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()
# 不讓別人調(diào)用
if __name__ == "__main__":
init()
2、登錄檢查,并選擇操作
import pymysql
# 定義全局變量為空
DB=None
# 創(chuàng)建Account類
class Account():
# 傳入?yún)?shù)
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:
# 把輸入賬號和密碼進行匹配(函數(shù)體內(nèi)部傳入?yún)?shù)用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("請輸入密碼:")
# 輸入的參數(shù)傳入給Account類,并創(chuàng)建account對象
account=Account(from_account_id,from_account_passwd)
# 調(diào)用check_account方法,進行登錄檢查
if account.check_account():
choose=input("請輸入操作:\n1、查詢余額\n2、取錢\n3、存錢\n4、取卡\n")
# 當(dāng)輸入不等于4的時候執(zhí)行,等于4則退出
while choose!="4":
# 查詢
if choose=="1":
print("111")
# 取錢
elif choose=="2":
print("222")
# 存錢
elif choose=="3":
print("333")
# 上面操作完成之后,繼續(xù)輸入其他操作
choose = input("請輸入操作:\n1、查詢余額\n2、取錢\n3、存錢\n4、取卡\n")
else:
print("謝謝使用!")
else:
print("賬號或密碼錯誤")
DB.close()
main()
3、加入查詢功能
存在銀行里的錢可能會產(chǎn)生利息,所以需要考慮余額為小數(shù)的問題,需要用到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函數(shù)進行四舍五入,'0.00'表示保留兩位小數(shù)
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":
# 調(diào)用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來執(zhí)行數(shù)據(jù)庫,還要注意取錢需要考慮余額是否充足的問題
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參數(shù))
def reduce_money(self,money):
cursor = DB.cursor()
try:
# 先調(diào)用query_money方法,查詢余額
has_money=self.query_money()
# 所取金額小于余額則執(zhí)行(注意類型轉(zhuǎn)換)
if decimal.Decimal(money) <= decimal.Decimal(has_money):
# 進行數(shù)據(jù)更新操作
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進行行計數(shù),行數(shù)為1則將數(shù)據(jù)提交給數(shù)據(jù)庫
if cursor.rowcount==1:
DB.commit()
return True
else:
# rollback數(shù)據(jù)庫回滾,行數(shù)不為1則不執(zhí)行
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())
# 調(diào)用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、加入存錢功能
存錢功能和取錢功能相似,而且不需要考慮余額的問題,至此已完善當(dāng)前所有功能?
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元,按任意鍵繼續(xù)\n" % (account.query_money()))
else:
print("存款失敗,按任意鍵繼續(xù)")
choose = input("請輸入操作:\n1、查詢余額\n2、取錢\n3、存錢\n4、取卡\n")
else:
print("謝謝使用!")
else:
print("賬號或密碼錯誤")
DB.close()
main()
以上就是Python MySQL數(shù)據(jù)庫基本操作及項目示例詳解 的詳細內(nèi)容,更多關(guān)于Python MySQL數(shù)據(jù)庫操作的資料請關(guān)注腳本之家其它相關(guān)文章!
- Python基礎(chǔ)之操作MySQL數(shù)據(jù)庫
- 教你怎么用Python操作MySql數(shù)據(jù)庫
- Python連接Postgres/Mysql/Mongo數(shù)據(jù)庫基本操作大全
- python中的mysql數(shù)據(jù)庫LIKE操作符詳解
- Python接口自動化淺析pymysql數(shù)據(jù)庫操作流程
- 利用python中pymysql操作MySQL數(shù)據(jù)庫的新手指南
- Python操作MySQL MongoDB Oracle三大數(shù)據(jù)庫深入對比
- python?實現(xiàn)?pymysql?數(shù)據(jù)庫操作方法
- Python練習(xí)之操作MySQL數(shù)據(jù)庫
相關(guān)文章
Python:二維列表下標(biāo)互換方式(矩陣轉(zhuǎn)置)
今天小編就為大家分享一篇Python:二維列表下標(biāo)互換方式(矩陣轉(zhuǎn)置),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
python打印9宮格、25宮格等奇數(shù)格 滿足橫豎斜相加和相等
這篇文章主要為大家詳細介紹了python打印9宮格、25宮格等奇數(shù)格,滿足橫豎斜相加和相等,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07
Python即時網(wǎng)絡(luò)爬蟲項目啟動說明詳解
這篇文章主要為大家詳細介紹了Python即時網(wǎng)絡(luò)爬蟲項目啟動說明,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02

