python資料庫-MySQL與python的交互(52)

来源:https://www.cnblogs.com/Se7eN-HOU/archive/2019/07/12/11173618.html
-Advertisement-
Play Games

一、python3中安裝PyMySQL模塊 命令安裝: 或者 2、使用在pyCharm中安裝PyMySQL模塊 二、PyMysql對象說明 1、Connection對象 用於建立與資料庫的連接 創建對象:調用connect()方法 參數host:連接的mysql主機,如果本機是'localhost' ...


 

一、python3中安裝PyMySQL模塊

命令安裝:

sudo apt-get install python-mysql

或者

pip install pymysql

2、使用在pyCharm中安裝PyMySQL模塊

 

二、PyMysql對象說明

1、Connection對象

  • 用於建立與資料庫的連接
  • 創建對象:調用connect()方法
conn=connect(參數列表)
  • 參數host:連接的mysql主機,如果本機是'localhost'
  • 參數port:連接的mysql主機的埠,預設是3306
  • 參數database:資料庫的名稱
  • 參數user:連接的用戶名
  • 參數password:連接的密碼
  • 參數charset:通信採用的編碼方式,預設是'gb2312',要求與資料庫創建時指定的編碼一致,否則中文會亂碼

  對象的方法

    • close()關閉連接
    • commit()事務,所以需要提交才會生效
    • rollback()事務,放棄之前的操作
    • cursor()返回Cursor對象,用於執行sql語句並獲得結果

2、Cursor對象

  • 執行sql語句
  • 創建對象:調用Connection對象的cursor()方法
cursor1=conn.cursor()

    對象的方法

  • close()關閉
  • execute(operation [, parameters ])執行語句,返回受影響的行數
  • fetchone()執行查詢語句時,獲取查詢結果集的第一個行數據,返回一個元組
  • next()執行查詢語句時,獲取當前行的下一行
  • fetchall()執行查詢時,獲取結果集的所有行,一行構成一個元組,再將這些元組裝入一個元組返回
  • scroll(value[,mode])將行指針移動到某個位置
    • mode表示移動的方式
    • mode的預設值為relative,表示基於當前行移動到value,value為正則向下移動,value為負則向上移動
    • mode的值為absolute,表示基於第一條數據的位置,第一條數據的位置為0

  對象的屬性

  • rowcount只讀屬性,表示最近一次execute()執行後受影響的行數
  • connection獲得當前連接對象

 

三、對Mysql基本操作的封裝

1、我們創建MySQLManager.py模塊,對Mysql的基本操作封裝

# coding=utf-8;
# 導入模塊pymysql模塊
import pymysql

# 封裝MySQL資料庫管理類
class MySQL_Manager(object):
    # 初始化方法
    def __init__(self,host,port,database,user,password,charset='utf8'):
        # 配置連接MySQL資料庫的基本信息
        self.host = host
        self.port = port
        self.database = database
        self.user = user
        self.password = password
        self.charset = charset
        
    # 使用python3鏈接MySQL資料庫
    def connect(self):
        # 鏈接
        self.connect = pymysql.connect(host = self.host, port = self.port, database = self.database, user = self.user, password = self.password,charset = self.charset)
        # 得到一個可以執行SQL語句的游標對象
        self.cursor = self.connect.cursor()
    
    # 操作完畢後關閉
    def close(self):
        # 關閉執行語句
        self.cursor.close()
        # 關閉連接
        self.connect.close()
        
    # 創建表操作
    def create_table(self,sql,params=()):
        # 先連接
        self.connect()
        # 執行創建語句
        self.cursor.execute(sql,params)
        # 關閉連接
        self.close()
        
    # 查詢一條數據
    def select_one(self,sql,params=()):
        result = None
        try:
            self.connect()
            self.cursor.execute(sql,params)
            result = self.cursor.fetchone()
            self.close()
        except Exception as e:
            print(e)
        return result
    
    # 查詢全部數據    
    def select_all(self,sql,params=()):
        list=()
        try:
            self.connect()
            self.cursor.execute(sql,params)
            list = self.cursor.fetchall()
            self.close()
        except Exception as e:
            print(e)
        return list
    
    # 插入
    def insert(self, sql, params=()):
        return self.__edit(sql, params)
    
    # 修改
    def update(self, sql, params=()):
        return self.__edit(sql, params)
    
    # 刪除
    def delete(self, sql, params=()):
        return self.__edit(sql, params)
    
    # 插入、修改、刪除其實一樣的,只是sql代碼不同,但是為了代碼的閱讀性更高,還是分開寫
    def __edit(self, sql, params):
        count = 0
        try:
            self.connect()
            count = self.cursor.execute(sql, params)
            self.connect.commit()
            self.close()
        except Exception as e:
            print(e)
        return count
        

2.創建testMySQL.py模塊對我們創建的MySQLManager.py模塊測試

# coding = utf-8

from MySQLManager import *

mysql_manager = MySQL_Manager("192.168.100.114",3306,"Hero","root","123456")

# 創建表
create_sql = "create table hero(id int auto_increment primary key,name varchar(20) not null unique,skill varchar(20) not null) engine=innodb default charset=utf8;"
mysql_manager.create_table(create_sql)

# 添加數據
insert_sql = "insert into hero(id,name,skill) values(1,'李白','青蓮劍歌');"
mysql_manager.insert(insert_sql)

# 查詢語句
select_sql = "select * from hero;"
list = mysql_manager.select_all(select_sql)
print(list)

# 修改
update_sql = "update hero set name='韓信' where id=1;"
mysql_manager.update(update_sql)

# 刪除語句
delete_sql = "delete from hero where id=1;"
mysql_manager.delete(delete_sql)

說明:

  • 為什麼MySQLManager裡面的方法都有params參數,這裡卻沒用?因為這隻是測試,我把所有的參數都直接寫在了sql語句中,但是為了程式的可擴展性,建議大家還是使用參數params
  • testMysql.py文件每運行一次裡面對資料庫的操作就會執行一次,例如創建表的操作只需要執行一次,當我們創建表成功之後,就可以把創建表的方法註釋掉,不用再創建了,同樣的,添加,刪除也是一樣。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、線程的使用步驟 2、第一種定義線程類的方法:繼承java.lang.Thread類 MyThread 文件: public class MyThread extends Thread { private int count=0; @Override public void run() { Sys ...
  • 回車鍵:開始游戲,空格鍵:暫停 / 繼續,方向鍵 或 WSAD 鍵:控制移動方向 下載地址 ...
  • 這個看著應該是使用堆排序,但我圖了一個簡單,所以就簡單hash表加選擇排序來做了。 使用結構體: 思路: hash表用來存儲每個值對應的頻率,每讀到一個數字,對應的頻率就加1。 然後從表中再把這些數據讀取出來。 先創建兩個長度為k的數組,一個用來記錄頻率,一個用來記錄對應的數值。 讀取數據的時候,使 ...
  • 作為一個樂於分享的人,我希望通過一些成熟優秀的代碼庫,來向大家展示讀源碼思路以及闡述編程方面的技巧,也希望大家從中思考並得到屬於自己的一套編程方法論。 半年以來,已進行72小時時長的源碼解讀分享視頻錄製,額外分享時間未計,雖有諸多不足,依然歡迎進行技術交流,也希望可以影響到更多人參與到分享中來,通過 ...
  • Apache Maven,是一個軟體(特別是Java軟體)項目管理及自動構建工具,由Apache軟體基金會所提供。基於項目對象模型(縮寫:POM)概念,Maven利用一個中央信息片斷能管理一個項目的構建、報告和文檔等步驟。曾是Jakarta項目的子項目,現為獨立Apache項目。1.軟體下載http ...
  • 微服務已經流行很久了。相比前兩年而言,確實很流行了。 微服務流行不是什麼壞事,微服務本身是一個很好的架構思想,架構思想一直在改變,微服務之前的SOA也是不錯的做法。只是,在享受新思想帶來的好處時,卻不要為了新而新。 微服務解決了SOA沒有解決的一些問題,但它並不是萬能的,它本身也並非什麼高大上的新技 ...
  • 一、調試技術 (1)調試流程​:單元測試->集成測試->交測試部 (2)分類:i.靜態調試(說白了就是看代碼,看看有沒有錯);ii.動態測試 1.pdb調試 ​相關連接:https://blog.csdn.net/xc_zhou/article/details/80921483 作者:周小董 2.p ...
  • 這幾天看書的時候看到一個演算法,叫粒子群演算法,這個演算法挺有意思的,下麵說說我個人的理解: 粒子群演算法(PSO)是一種進化演算法,是一種求得近似最優解的演算法,這種演算法的時間複雜度可能會達到O(n!),得到的結果不一定是最優解,往往已經很接近最優解了。最早是Kenny 和 Eberhart於1995年提出的 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...