成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python 數(shù)據(jù)庫(kù)編程,這篇是針對(duì) mysql 的,滾雪球?qū)WPython第4季第13篇

xiaowugui666 / 1770人閱讀

摘要:的安裝博客補(bǔ)充知識(shí)年最新安裝教程,滾雪球?qū)W第四季。操作操作數(shù)據(jù)庫(kù)一般被程序員成為操作增刪改查,其中各個(gè)字符分別代表新增,讀取,更新,刪除??梢苑祷厥苡绊懶袛?shù),可以直接通過該值判斷是否修改成功。

在第一季滾雪球?qū)W python 中,我們已經(jīng)接觸了 python 操作 sqlite,本篇博客為你介紹 python 與 mysql 和 nosql 之間的故事。

在正式學(xué)習(xí)之前,先確保你電腦上已經(jīng)安裝了 mysql 。

mysql 的安裝博客:補(bǔ)充知識(shí):2021 年 mysql 最新 windows 安裝教程,滾雪球?qū)W python 第四季。

mysql 一些簡(jiǎn)單命令

對(duì)于 mysql 的細(xì)致學(xué)習(xí),咱們應(yīng)該多帶帶開一個(gè)系列,這個(gè) flag 先立下了,本文為了學(xué)習(xí) python 操作 mysql 數(shù)據(jù)庫(kù),只能先做一些基本鋪墊。

查看所有數(shù)據(jù)庫(kù)

show databases;

查看幫助

help

退出 mysql

exit

創(chuàng)建數(shù)據(jù)庫(kù)

create database cadb;

刪除數(shù)據(jù)庫(kù)

drop database cadb;

使用某個(gè)數(shù)據(jù)庫(kù)

use cadb;

查看庫(kù)表

show tables;

查看表結(jié)構(gòu)

desc 表名;

除了上述內(nèi)容外,你還要學(xué)習(xí)建表語(yǔ)句,刪表語(yǔ)句,表中插入數(shù)據(jù)語(yǔ)句,表刪除數(shù)據(jù)語(yǔ)句,表更新數(shù)據(jù)語(yǔ)句,這些稍后在 python 操作 mysql 中進(jìn)行實(shí)現(xiàn)。

python 操作 mysql

操作數(shù)據(jù)庫(kù)一般被程序員成為 CRUD 操作(增刪改查),其中各個(gè)字符分別代表 C(Create) 新增,R(Read) 讀取,U(Update) 更新,D(Delete) 刪除。

在 python3 中推薦使用 pymysql 模塊操作數(shù)據(jù)庫(kù),模塊使用命令 pip install PyMySQL 進(jìn)行安裝。

在此之前,先通過 MySQL Command Line Client 創(chuàng)建一個(gè)表用來做測(cè)試。

新建庫(kù),新建表,插入數(shù)據(jù) 命令依次如下

show databases;create database cadb;use cadb;-- 建表語(yǔ)句create table user(name varchar(10),uid int,primary key(uid));desc user;


接下來在表中插入 2 條數(shù)據(jù)。

insert into user(name,uid) values ("橡皮擦",1);insert into user(name,uid) values ("CSDN",2);

簡(jiǎn)單的查詢 sql 如下所示:

select * from user;


下面就可以在 python 中編寫操作該庫(kù)表的相關(guān)代碼了,數(shù)據(jù)庫(kù)鏈接步驟如下:

  1. 連接數(shù)據(jù)庫(kù),生成連接對(duì)象;
  2. 創(chuàng)建游標(biāo)對(duì)象,用于訪問數(shù)據(jù)表;
  3. 執(zhí)行 sql 語(yǔ)句;
  4. 關(guān)閉游標(biāo);
  5. 關(guān)閉連接。

python 查詢數(shù)據(jù)
python 連接數(shù)據(jù)庫(kù)獲取數(shù)據(jù)

import pymysql# python 連接數(shù)據(jù)庫(kù),返回?cái)?shù)據(jù)庫(kù)連接對(duì)象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")print(conn)

輸出連接對(duì)象如下所示:

<pymysql.connections.Connection object at 0x00000000021E2F60>

其中 connect 方法相關(guān)的參數(shù)可以依據(jù)名稱進(jìn)行判斷。

接下來就是創(chuàng)建游標(biāo),提取數(shù)據(jù)。

# 通過 cursor() 創(chuàng)建游標(biāo)對(duì)象,并讓查詢結(jié)果以字典格式輸出cur = conn.cursor(cursor=pymysql.cursors.DictCursor)# 輸出 

下一步使用游標(biāo)對(duì)象 curexecute 方法執(zhí)行 sql。

cur.execute("select * from user")

最后通過相關(guān)方法獲取查詢結(jié)果,本案例獲取所有用戶使用 fetchall 方法。

# 獲取查詢結(jié)果data = cur.fetchall()

輸入數(shù)據(jù)庫(kù)檢索的所有數(shù)據(jù)。

[{"name": "橡皮擦", "uid": 1}, {"name": "CSDN", "uid": 2}]

關(guān)閉游標(biāo),關(guān)閉連接

# 關(guān)閉游標(biāo)cur.close()# 關(guān)閉數(shù)據(jù)庫(kù)連接conn.close()

接下來我們將其修改的復(fù)雜一些,檢索特定數(shù)據(jù),例如 uid=1 的數(shù)據(jù),并且用到上下文管理器 with 進(jìn)行對(duì)象的關(guān)閉。

第一種寫法

import pymysql# python 連接數(shù)據(jù)庫(kù),返回?cái)?shù)據(jù)庫(kù)連接對(duì)象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")# print(conn)with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur:    cur.execute("select * from user where uid = %s", 1)    # 獲取查詢結(jié)果    data = cur.fetchall()    print(data)# 關(guān)閉數(shù)據(jù)庫(kù)連接conn.close()

第二種寫法

import pymysql# python 連接數(shù)據(jù)庫(kù),返回?cái)?shù)據(jù)庫(kù)連接對(duì)象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")# print(conn)with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur:    cur.execute("select * from user where uid = %(uid)s", {"uid": 1})    # 獲取查詢結(jié)果    data = cur.fetchall()    print(data)# 關(guān)閉數(shù)據(jù)庫(kù)連接conn.close()

兩種寫法,在 execute 方法參數(shù)存在差異,可直接對(duì)比學(xué)習(xí)。

python 更新數(shù)據(jù)表數(shù)據(jù)
接下來演示的是使用 python 去更新表數(shù)據(jù),例如將 uid = 2name 列更新為 Code。

import pymysql# python 連接數(shù)據(jù)庫(kù),返回?cái)?shù)據(jù)庫(kù)連接對(duì)象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")# print(conn)with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur:    try:        cur.execute("update user set name =%s where uid = %s", ["Code", 2])        conn.commit()  # 提交事務(wù)    except Exception as e:        print("數(shù)據(jù)更新異常", e)        conn.rollback()  # 數(shù)據(jù)回滾# 關(guān)閉數(shù)據(jù)庫(kù)連接conn.close()

上述代碼核心為在執(zhí)行 SQL 操作之后,需要使用事務(wù)處理,即 conn.commit 提交事務(wù),確保當(dāng)前修改生效,如果出現(xiàn)異常,還需要使用 conn.rollback 對(duì)提交事務(wù)進(jìn)行回滾。

cursor. execute 可以返回受影響行數(shù),可以直接通過該值判斷是否修改成功。

本次代碼還使用了 try-except 語(yǔ)句,對(duì)于 PyMySQL 模塊內(nèi)置的異常類,清單如下:

  • StandardError
    • Warning
    • Error
      • InterfaceError
      • DatabaseError
        • DataError
        • OperationalError
        • IntegrityError
        • ProgrammingError
        • NotSupportedError

python 新增數(shù)據(jù)表數(shù)據(jù)
接下來演示增加數(shù)據(jù),本次插入數(shù)據(jù)都采用硬編碼,如果想創(chuàng)建一個(gè)自動(dòng)遞增的表字段,需要繼續(xù)研究 sql 相關(guān)寫法。

import pymysql# python 連接數(shù)據(jù)庫(kù),返回?cái)?shù)據(jù)庫(kù)連接對(duì)象conn = pymysql.connect(host="127.0.0.1", user="root", password="xiangpica", database="cadb", charset="utf8")# print(conn)with conn.cursor(cursor=pymysql.cursors.DictCursor) as cur:    try:        affected = cur.execute("insert into user(name,uid) values (%s,%s)", ["Good", 3])        conn.commit()  # 提交事務(wù)        print("受影響行數(shù)", affected)    except Exception as e:        print("數(shù)據(jù)插入異常", e)        conn.rollback()  # 數(shù)據(jù)回滾# 關(guān)閉數(shù)據(jù)庫(kù)連接conn.close()

python 刪除表格數(shù)據(jù)
核心代碼如下所示:

affected = cur.execute("delete from user where uid = %s", [3])conn.commit()  # 提交事務(wù)print("受影響行數(shù)", affected)

寫到這里,你可以自行完成一個(gè) python 簡(jiǎn)單的數(shù)據(jù)庫(kù)操作封裝。

python 操作 nosql 之 dbm

mysql 數(shù)據(jù)關(guān)系型數(shù)據(jù)庫(kù),與之對(duì)應(yīng)的就是非關(guān)系型數(shù)據(jù)庫(kù),例如 python 內(nèi)置的 dbm(database manager )

第一個(gè)要學(xué)習(xí)的方法是 dbm.open,方法原型如下所示:

def open(file, flag="r", mode=0o666):

flag 參數(shù):

  • r : 只讀;
  • w : 只寫;
  • n : 總是創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),打開方式為讀寫;
  • c : 存在不創(chuàng)建,不存在則創(chuàng)建。

關(guān)閉數(shù)據(jù)庫(kù)使用 dbm.close(),使用 with 語(yǔ)句之后,不需要手動(dòng)釋放資源。

with dbm.open(xxx) as db:	pass

dbm 存儲(chǔ)的形式類似 python 字典,以鍵值對(duì)形式存在。

import dbmwith dbm.open("example.db", "n") as db:    db["name"] = "橡皮擦" # 存儲(chǔ)值    db["age"] = "18" # values must be bytes or strings

讀取值使用 db[key] 即可,如果沒有 key 值,提示 KeyError 錯(cuò)誤。

import dbmwith dbm.open("example.db", "r") as db:    ca = db["name"]    age = db["age"]    print(ca)

dbm 數(shù)據(jù)庫(kù)保存的數(shù)據(jù)是字符串類型或者字節(jié)序列類型,讀取到的值是字節(jié)序列類型,需要使用解碼函數(shù) decode 轉(zhuǎn)換成字符串。

寫在后面

以上內(nèi)容就是本文的全部?jī)?nèi)容,希望對(duì)學(xué)習(xí)路上的你有所幫助~

今天是持續(xù)寫作的第 230 / 365 天。
期待 關(guān)注,點(diǎn)贊、評(píng)論收藏。

更多精彩

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/121550.html

相關(guān)文章

  • #yyds干貨盤點(diǎn)# 3. 無轉(zhuǎn)折不編程,雪球學(xué) Python

    摘要:在流程控制中,你將同步學(xué)到關(guān)系運(yùn)算符與邏輯運(yùn)算符。關(guān)系運(yùn)算符在中關(guān)系運(yùn)算符其實(shí)就是比大小的概念,所以要學(xué)習(xí)的就是大于小于等于等內(nèi)容。邏輯運(yùn)算符邏輯運(yùn)算符在中有個(gè),分別是。含有邏輯運(yùn)算符的式子,最終返回的結(jié)果也是布爾值。 滾雪球?qū)W Python,目標(biāo)就是讓 Python 學(xué)起來之后,越滾越大。三、無轉(zhuǎn)折不編程如果...

    xuexiangjys 評(píng)論0 收藏0
  • 博客和你嘮嘮 python 并發(fā),雪球學(xué)python四季,16

    摘要:圖片下載屬于操作,比較耗時(shí),基于此,可以利用中的多線程將其實(shí)現(xiàn)。更多精彩滾雪球?qū)W完結(jié)滾雪球?qū)W第二輪完結(jié)滾雪球?qū)W第三輪滾雪球?qū)W番外篇完結(jié) 在 python 編碼過程中...

    qpwoeiru96 評(píng)論0 收藏0
  • 1. 雪球學(xué)Python四季開啟,一需三吃,Python 函數(shù)式編程初識(shí),面向過程,面向?qū)ο?,?/b>

    摘要:看起來好像是廢話,它還有一個(gè)補(bǔ)充的說明,在函數(shù)式編程中要避免狀態(tài)變化和使用可變對(duì)象。函數(shù)式編程的特點(diǎn)在中,函數(shù)即對(duì)象,例如聲明一個(gè)函數(shù)之后,你可以調(diào)用其屬性。 ...

    huaixiaoz 評(píng)論0 收藏0
  • Python

    摘要:最近看前端都展開了幾場(chǎng)而我大知乎最熱語(yǔ)言還沒有相關(guān)。有關(guān)書籍的介紹,大部分截取自是官方介紹。但從開始,標(biāo)準(zhǔn)庫(kù)為我們提供了模塊,它提供了和兩個(gè)類,實(shí)現(xiàn)了對(duì)和的進(jìn)一步抽象,對(duì)編寫線程池進(jìn)程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進(jìn)階的書, 里面介紹的基本都是高級(jí)的python用法. 對(duì)于初學(xué)python的人來說, 基礎(chǔ)大概也就夠用了...

    dailybird 評(píng)論0 收藏0
  • 首次公開,整理12年積累博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<