Python操作MySQL

python通過PyMySQL操作MySQL

安裝 PyMySQL

pip install pymysql

注意 如何測(cè)試是否安裝好了,打開cmd進(jìn)入python3環(huán)境,導(dǎo)入 pymysql 包,能成功導(dǎo)入并打印出版本號(hào),表示成功安裝

>>> import pymysql
>>> pymysql.__version__
'0.8.1'

操作數(shù)據(jù)庫(kù)

要操作數(shù)據(jù)庫(kù),首先就要建立和數(shù)據(jù)庫(kù)的連接,有兩種配置可以連接數(shù)據(jù)庫(kù):

  1. 第一種配置

    con = pymysql.connect(
        host = '主機(jī)',
        port = '端口',
        user = '用戶名',
        password = '密碼',
        db = '數(shù)據(jù)庫(kù)名',
        charset = 'utf8'
    )
    
  2. 第二種配置

    config = {
        "host" : "主機(jī)",
        "port" : "端口",
        "user" : "用戶名",
        "password" : "密碼",
        "db" : "數(shù)據(jù)庫(kù)名",
        "charset" : "utf8"
    }
    con = pymysql.connect(**config)
    

上述兩種方式配置, 任選一種方式來連接數(shù)據(jù)庫(kù),都是可行的,然后我們要測(cè)試是不是可以成功連上數(shù)據(jù)庫(kù)(我將采用第二種方式進(jìn)行連接)

# 以下操作基于配置好連接,在進(jìn)行測(cè)試
# 測(cè)試連接
cursor = con.cursor()
cursor.execute('select 1')
re = cursor.fetchone()
print(re)
# 關(guān)閉連接
cursor.close()
con.close()

控制臺(tái)輸出

# 打印以下,表示連接成功,否則連接失敗
(1,)

增刪改查

因?yàn)槊看斡玫竭@些操作都會(huì)連接下數(shù)據(jù)庫(kù),那么我們就可以把連接封裝成一個(gè)類,使用面向?qū)ο髞磉M(jìn)行操作

class MySQLClass:

    #  初始化
    def __init__(self):
        self.get_conn()

    # 創(chuàng)建連接
    def get_conn(self):
        try:
            config = {
                "host" : "主機(jī)",
                "port" : "端口",
                "user" : "用戶名",
                "password" : "密碼",
                "db" : "數(shù)據(jù)庫(kù)名",
                "charset" : "utf8"
            }
            self.conn = pymysql.connect(**config)
        except pymysql.Error as e:
            print('Error %s: %s' % (e.args[0], e.args[1]))

    # 關(guān)閉連接
    def close_conn(self):
        try:
            if self.conn:
                self.conn.close()

        except pymysql.Error as e:
            print('Error %s: %s' % (e.args[0], e.args[1]))

增加

def add_operate(self):
    try:
        # 準(zhǔn)備sql
        sql = 'insert into user(name, age) values(%s, %s)'
        # 找到cursor
        cursor = self.conn.cursor()
        # 執(zhí)行sql
        cursor.execute(sql, ('Tom', 20))
        # 提交事務(wù)
        self.conn.commit()
        # 關(guān)閉連接
        cursor.close()
        self.close_conn()
    except :
        print('error')
        # 回滾
        self.conn.rollback()

刪除

def delete_operate(self):
    try:
        sql = "delete from user where %s=%s" % ('id', 1)
        cursor = self.conn.cursor()
        cursor.execute(sql)
        self.conn.commit()
    except:
        print('error')
        self.conn.rollback()

修改

def update_operate(self):
    try:
        sql = "update user set name=%s where id=1"
        cursor = self.conn.cursor()
        cursor.execute(sql, ('Which666'))
        self.conn.commit()
    except:
        print('error')
        self.conn.rollback()

查詢

def search_operate(self):
    # fetchone 獲取一條數(shù)據(jù)
    sql ="select * from user where name=%s"
    cursor = self.conn.cursor()
    cursor.execute(sql, ('Tom', ))
    result = cursor.fetchone()
    print(result)
    # 假設(shè)現(xiàn)在要通過 result['name'] 獲取 報(bào)錯(cuò)
    # 通過cursor的description 我們可以得出一個(gè)詳情 這是一個(gè)元祖
    print(cursor.description)
    # 元祖轉(zhuǎn)字典
    result =dict(zip([k[0] for  k in cursor.description], cursor.fetchone()))
    print(result)
    print(result['name'])
    # 查詢總共有多少行數(shù)據(jù)
    print(cursor.rowcount)
    cursor.close()
    self.conn.close()
    return result        
def search_operate(self):
    #  fetchall()  獲取多條數(shù)據(jù)
    sql ="select * from user where name=%s"
    cursor = self.conn.cursor()
    cursor.execute(sql, ('Tom', ))
    result = [dict(zip([k[0] for k in cursor.description], row)) for row in cursor.fetchall()]
        for i in result:
            print(i)
    cursor.close()
    self.conn.close()
    return result        
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容