Python操作MySQL步驟
# -*- encoding: utf-8 -*-
'''
pip install pymysql 安裝python的操作數據庫
利用python對mysql進行增刪改查的步驟
1、創建connection
2、獲取connect
3、獲取cursor的對象
4、關閉cursor
5、關閉connect
6、結束
'''
# 導包的方式
#import pymysql
#pymysql.connect()
# 另一種 連接方式 獲取connect
from pymysql import *
# host='127.0.0.1'也可以,代表都是本機 port=3306代表端口號 database='python_01'數據庫名稱 賬號密碼:user='root', password='root' charset='utf8'字符集編碼
conn = connect(host='localhost', port=3306, database='python_01', user='root', password='root', charset='utf8')
'''
close() 關閉連接
commit() 提交
cursor() 返回Cursor對象,用於執行sql語句並獲得結果
'''
# 獲取cursor 第三步
cursor = conn.cursor()
print(cursor.execute('select * from students')) # 執行sql的語句select * from students, 返回的是受影響的數據的行數
#result = cursor.fetchall() # 傳所有數據
#result = cursor.fetchone() # 傳一個數據
result = cursor.fetchmany(2) # 傳多個數據
print(result) # 元祖類型
# 第四步
cursor.close() # 先關閉遊標再關閉連接
conn.close() # 連接關閉
# print("-"*50)
# 第五步
res = cursor.fetchmany(3)
print(res) # 這裏數據能夠輸出是因爲有緩存,正常情況下無法顯示數據,因爲和數據庫的連接已經關閉了
對象的方法
- close()關閉 先關閉遊標,在關閉鏈接
- execute(operation [, parameters ])執行語句,返回受影響的行數,主要用於執行insert、update、delete語句,也可以執行create、alter、drop等語句
- fetchone()執行查詢語句時,獲取查詢結果集的第一個行數據,返回一個元組
- fetchall()執行查詢時,獲取結果集的所有行,一行構成一個元組,再將這些元組裝入一個元組返回
# -*- encoding: utf-8 -*-
"""
@File : python3_pymysql_demo1.py
@Time : 2019/10/12 16:03
@Author : chen
"""
from pymysql import *
class MyDb(object):
def __init__(self):
self.conn()
# 數據庫的連接
def conn(self):
try:
self.conn=connect(
host='localhost',
port=3306,
user='root',
password='root',
charset='utf8',
db='python_01'
)
except Exception as e: # 異常處理
print(e)
# 獲取一條數據
def get_one(self):
sql = "select * from students"
# 遊標對象
cursors = self.conn.cursor()
cursors.execute(sql)
result=cursors.fetchone() # 獲取一條數據
# print(result)
cursors.close()
self.conn.close()
return result
'''
sql = "select * from students"
cursors=self.excute_sql(sql) # 這部分就是減少的一部分重複代碼
result=cursors.fetchone()
print(result)
cursors.close()
self.conn.close()
return result
'''
# 獲取更多數據
def get_many(self):
sql = "select * from students"
# 遊標對象
cursors = self.conn.cursor()
cursors.execute(sql)
result = cursors.fetchall() # 獲取所有數據
# print(result)
cursors.close()
# self.conn.close()
self.close_conn()
return result
# 執行連接sql語句 即上面兩個函數重複的連接數據庫的語句,可以定義一個方法,減少代碼量
def excute_sql(self, sql):
cursors = self.conn.cursor()
cursors.execute(sql)
return cursors
# 新增 修改 刪除 數據庫訊息
def operation(self):
try:
# # 新增數據sql實現
# sql= 'insert into students(`name`) values(`老王`)' # 注意符號是`` 不是單引號'' # 新增
# cursors =self.conn.cursor()
# cursors.execute(sql)
#
# sql = 'insert into students(`name1`) values(`老王1`)' # 注意符號是`` 不是單引號'' # 新增
# cursors = self.conn.cursor()
# cursors.execute(sql)
#
# # 提交事務 當上main的sql語句沒有出現問題的時候,可以一起執行提交sql語句,數據庫也會改變,當語句中有一個錯誤時候,所有的sql都無法提交執行
# self.conn.commit()
# sql的更新操作
sql = 'update students set name = `老王` where id =12'
cursors.execute(sql)
# 提交事務
self.conn.commit()
# 刪除操作
# sql = 'delete from students where id = 16'
cursors.execute(sql)
# 提交事務
self.conn.commit()
except Exception as e:
print(e)
# 部分提交 使用try : except 語句可以使多個sql語句中正確的部分進行提交執行 銀行轉賬的情況下,不能使用部分提交,需要採用回滾
# self.conn.commit()
# 回滾 即其中一條語句出現錯誤,所有的都不執行
self.conn.rollback()
def close_conn(self):
try:
self.conn.close()
except Exception as e:
print(e)
# 主函數就定義在main函數中
def main():
obj = MyDb()
# obj.get_one() # 需要輸出數據到對象中,否則報錯pymysql.err.InterfaceError
# res = obj.get_many()
#
# for item in res:
# print(item)
obj.operation() # 每次只執行一個sql的方法,否則報錯pymysql.err.InterfaceError
if __name__ == '__main__':
main()
—代碼實現商品查詢功能函數
# -*- encoding: utf-8 -*-
"""
@File : python3_pymysql_demo2.py
@Time : 2019/10/12 16:52
@Author : chen
"""
'''
1: 查詢所有的商品
2: 查詢商品的分類
3: 查詢輸入的品牌
'''
from pymysql import *
class Tb(object):
def __init__(self):
self.conn = connect(
host='localhost',
port=3306,
user='root',
password='root',
charset='utf8',
db='python-01'
)
self.cursor = self.conn.cursor() # 創建遊標對象
@staticmethod
def print_menu(): # 靜態方法,當函數中不需要傳參數的時候,可以使用靜態方法@staticmethod
print("1: 查詢所有的商品")
print("2: 查詢商品的分類")
print("3: 查詢輸入的品牌")
print("4: 退出")
num = input("請輸入數字:")
print("*" * 50)
return num
def execute_sql(self, sql): # 減少重複的代碼
if self.cursor.execute(sql): # self.cursor.execute(sql)是輸出查詢數據的行數,爲了防止數據庫查詢不到輸入的品牌信息但是也
# 不顯示信息
for item in self.cursor.fetchall():
print(item)
else:
print("未查詢到結果!")
def show_all_goods(self): # 定義不同查詢sql語句的方法
sql = 'select * from goods'
self.execute_sql(sql)
def show_all_cate(self): # 定義不同查詢sql語句的方法
sql = 'select cate_name from goods'
self.execute_sql(sql)
def show_brand(self, brand_name): # 定義不同查詢sql語句的方法
sql = "select * from goods where brand_name = '{}'".format(brand_name)
self.execute_sql(sql)
def run(self):
while True:
num = self.print_menu()
if num == '1':
self.show_all_goods()
elif num == '2':
self.show_all_cate()
elif num == "3":
brand_name = input("請輸入品牌名稱:")
self.show_brand(brand_name)
elif num == "4":
self.cursor.close()
self.conn.close()
else:
print("輸入有誤!請重新輸入")
def main():
tb = Tb()
tb.run()
if __name__ == '__main__':
main()