數據庫學習——03—Mysql與Python交互(創建表、連接、關閉數據庫等)

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()



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章