最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python基礎(chǔ)之操作MySQL數(shù)據(jù)庫

 更新時間:2021年05月06日 15:53:48   作者:拿頭來堅持  
這篇文章主要介紹了Python基礎(chǔ)之操作MySQL數(shù)據(jù)庫,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下

一、數(shù)據(jù)庫操作

1.1 安裝PyMySQL

pip install PyMySQL

1.2 連接數(shù)據(jù)庫

python連接test數(shù)據(jù)庫

import pymysql

host = 'localhost'      # 主機地址
username = 'root'       # 數(shù)據(jù)庫用戶名
password = ''           # 數(shù)據(jù)庫密碼
db_name = 'test'        # 數(shù)據(jù)庫名稱

# 創(chuàng)建connect對象
connect = pymysql.connect(host=host, user=username, password=password, database=db_name)

# 獲取游標(biāo)對象
cursor = connect.cursor()

# 查詢數(shù)據(jù)庫版本
cursor.execute('SELECT VERSION()')

# 從查詢結(jié)果集中獲取下一行數(shù)據(jù),返回值為一個值的序列
result = cursor.fetchone()

# 打印結(jié)果
print(result)

# 關(guān)閉游標(biāo)
cursor.close()

# 關(guān)閉數(shù)據(jù)庫連接
connect.close()

執(zhí)行結(jié)果:
('10.4.17-MariaDB',)

1.3 創(chuàng)建數(shù)據(jù)表

創(chuàng)建一個默認(rèn)編碼格式為utf8的數(shù)據(jù)表users

id:int類型,不能為空,有自增屬性,主鍵約束

name:varchar類型,長度最多為10字符,可以為空

age:int類型,可以為空

import pprint
import pymysql

host = 'localhost'      # 主機地址
username = 'root'       # 數(shù)據(jù)庫用戶名
password = ''           # 數(shù)據(jù)庫密碼
db_name = 'test'        # 數(shù)據(jù)庫名稱

# 創(chuàng)建connect對象
connect = pymysql.connect(host=host, user=username, password=password, database=db_name)

# 獲取游標(biāo)對象
cursor = connect.cursor()

# 創(chuàng)建數(shù)據(jù)表的SQL命令
create_sql = '''
CREATE TABLE `users`(
    `id` INT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(10) NULL,
    `age` INT NULL,
    PRIMARY KEY (`id`))
    DEFAULT CHARACTER SET = utf8;
'''
# 創(chuàng)建數(shù)據(jù)表
cursor.execute(create_sql)

# 查詢我們創(chuàng)建的數(shù)據(jù)表的結(jié)構(gòu)
cursor.execute('DESC users')

# 從查詢結(jié)果中獲取結(jié)果的所有(或者剩余)行數(shù)據(jù),返回值為包含序列的序列(例如元組序列)
result = cursor.fetchall()

# 打印結(jié)果
pprint.pprint(result)

# 關(guān)閉游標(biāo)
cursor.close()

# 關(guān)閉數(shù)據(jù)庫連接
connect.close()

執(zhí)行結(jié)果:
(('id', 'int(11)', 'NO', 'PRI', None, 'auto_increment'),
 ('name', 'varchar(10)', 'YES', '', None, ''),
 ('age', 'int(11)', 'YES', '', None, ''))

在這里插入圖片描述

1.4 插入,查詢數(shù)據(jù)

插入3行數(shù)據(jù):

id:1,name:路飛,age:18
id:2,name:娜美,age:19
id:3,name:索隆,age:20

import pprint
import pymysql

host = 'localhost'      # 主機地址
username = 'root'       # 數(shù)據(jù)庫用戶名
password = ''           # 數(shù)據(jù)庫密碼
db_name = 'test'        # 數(shù)據(jù)庫名稱

# 創(chuàng)建connect對象,插入中文時需要指定編碼格式
connect = pymysql.connect(host=host, user=username, password=password, database=db_name, charset='utf8')

# 獲取游標(biāo)對象查詢返回字典
cursor = connect.cursor(pymysql.cursors.DictCursor)

# 插入數(shù)據(jù)的SQL命令
insert_sql = '''
INSERT INTO users (id, name, age)
    VALUES (1, '路飛', 18),(2, '娜美', 19),(3, '索隆', 20)
'''

try:
    # 插入數(shù)據(jù)到數(shù)據(jù)表
    cursor.execute(insert_sql)
    # 提交任何掛起的事務(wù)到數(shù)據(jù)庫
    connect.commit()
except Exception as e:
    # 發(fā)送數(shù)據(jù)回滾,回滾到事務(wù)開始時的狀態(tài)
    connect.rollback()

# 查詢數(shù)據(jù)
cursor.execute('SELECT * FROM users')

# 只返回一行數(shù)據(jù)
# result_one = cursor.fetchone()
# print('---fetchone---')
# pprint.pprint(result_one)

# 返回全部數(shù)據(jù)
result_all = cursor.fetchall()
print('---fetchall---')
pprint.pprint(result_all)

# 關(guān)閉游標(biāo)
cursor.close()

# 關(guān)閉數(shù)據(jù)庫連接
connect.close()

執(zhí)行結(jié)果:
---fetchall---
[{'age': 18, 'id': 1, 'name': '路飛'},
 {'age': 19, 'id': 2, 'name': '娜美'},
 {'age': 20, 'id': 3, 'name': '索隆'}]

在這里插入圖片描述

1.5 更新,查詢數(shù)據(jù)

更新數(shù)據(jù)id:3,name:山治,age:21

import pprint
import pymysql

host = 'localhost'      # 主機地址
username = 'root'       # 數(shù)據(jù)庫用戶名
password = ''           # 數(shù)據(jù)庫密碼
db_name = 'test'        # 數(shù)據(jù)庫名稱

# 創(chuàng)建connect對象,插入中文時需要指定編碼格式
connect = pymysql.connect(host=host, user=username, password=password, database=db_name, charset='utf8')

# 獲取游標(biāo)對象查詢返回字典
cursor = connect.cursor(pymysql.cursors.DictCursor)

# 查詢數(shù)據(jù)
cursor.execute('SELECT * FROM users')

# 返回更新前全部數(shù)據(jù)
result_all = cursor.fetchall()
print('---更新前---')
pprint.pprint(result_all)

# 更新數(shù)據(jù)的SQL命令
update_sql = '''
	UPDATE users SET name = '山治',age = 21 WHERE id = 3
'''

try:
    # 更新數(shù)據(jù)到數(shù)據(jù)表
    cursor.execute(update_sql)
    # 提交任何掛起的事務(wù)到數(shù)據(jù)庫
    connect.commit()
except Exception as e:
    # 發(fā)送數(shù)據(jù)回滾,回滾到事務(wù)開始時的狀態(tài)
    connect.rollback()

# 查詢數(shù)據(jù)
cursor.execute('SELECT * FROM users')

# 返回更新后全部數(shù)據(jù)
result_all = cursor.fetchall()
print('---更新后---')
pprint.pprint(result_all)

# 關(guān)閉游標(biāo)
cursor.close()

# 關(guān)閉數(shù)據(jù)庫連接
connect.close()

執(zhí)行結(jié)果:
---更新前---
[{'age': 18, 'id': 1, 'name': '路飛'},
 {'age': 19, 'id': 2, 'name': '娜美'},
 {'age': 20, 'id': 3, 'name': '索隆'}]
---更新后---
[{'age': 18, 'id': 1, 'name': '路飛'},
 {'age': 19, 'id': 2, 'name': '娜美'},
 {'age': 21, 'id': 3, 'name': '山治'}]

在這里插入圖片描述

1.6 刪除,查詢數(shù)據(jù)

刪除'age': 19, 'id': 2, 'name': '娜美'該行數(shù)據(jù)

import pprint
import pymysql

host = 'localhost'      # 主機地址
username = 'root'       # 數(shù)據(jù)庫用戶名
password = ''           # 數(shù)據(jù)庫密碼
db_name = 'test'        # 數(shù)據(jù)庫名稱

# 創(chuàng)建connect對象,插入中文時需要指定編碼格式
connect = pymysql.connect(host=host, user=username, password=password, database=db_name, charset='utf8')

# 獲取游標(biāo)對象查詢返回字典
cursor = connect.cursor(pymysql.cursors.DictCursor)

# 查詢數(shù)據(jù)
cursor.execute('SELECT * FROM users')

# 返回刪除前全部數(shù)據(jù)
result_all = cursor.fetchall()
print('---刪除前---')
pprint.pprint(result_all)

# 刪除數(shù)據(jù)的SQL命令
update_sql = '''
	DELETE FROM users WHERE id = 2
'''

try:
    # 刪除數(shù)據(jù)表的數(shù)據(jù)
    cursor.execute(update_sql)
    # 提交任何掛起的事務(wù)到數(shù)據(jù)庫
    connect.commit()
except Exception as e:
    # 發(fā)送數(shù)據(jù)回滾,回滾到事務(wù)開始時的狀態(tài)
    connect.rollback()

# 查詢數(shù)據(jù)
cursor.execute('SELECT * FROM users')

# 返回刪除后全部數(shù)據(jù)
result_all = cursor.fetchall()
print('---刪除后---')
pprint.pprint(result_all)

# 關(guān)閉游標(biāo)
cursor.close()

# 關(guān)閉數(shù)據(jù)庫連接
connect.close()

執(zhí)行結(jié)果:
---刪除前---
[{'age': 18, 'id': 1, 'name': '路飛'},
 {'age': 19, 'id': 2, 'name': '娜美'},
 {'age': 21, 'id': 3, 'name': '山治'}]
---刪除后---
[{'age': 18, 'id': 1, 'name': '路飛'}, {'age': 21, 'id': 3, 'name': '山治'}]

在這里插入圖片描述

二、連接與游標(biāo)對象的方法

2.1 連接對象的方法

  • .close()方法:

馬上關(guān)閉數(shù)據(jù)連接(而不是當(dāng)__del__方法被調(diào)用的時候)。此后連接變得不可用,再次訪問本連接對象會觸發(fā)一個錯誤,使用本連接對象的游標(biāo)對象,也會導(dǎo)致例外發(fā)生。在關(guān)閉連接對象之前,沒有提交(commit)對數(shù)據(jù)庫的改變將會導(dǎo)致一個隱含的回滾動作(rollback),這將丟棄之前的數(shù)據(jù)改變操作。

  • .commit()方法:

提交任何掛起的事務(wù)到數(shù)據(jù)庫中。

  • .rollback()方法:

對于支持事務(wù)的數(shù)據(jù)庫。調(diào)用此方法將導(dǎo)致數(shù)據(jù)庫回滾到事務(wù)開始時的狀態(tài)。

  • .cursor()方法:

方法返回給定連接上建立的游標(biāo)對象(Cursor Object),如果數(shù)據(jù)庫沒有提供對應(yīng)的游標(biāo)對象,那么有程序來模擬實現(xiàn)游標(biāo)功能。

2.2 游標(biāo)對象的方法

  • .close()方法:

立即關(guān)閉游標(biāo)(不論__del__方法是否已被調(diào)用),此后游標(biāo)對象就變得不可用了。

  • .execute(operation[,parameters])方法:

準(zhǔn)備和執(zhí)行數(shù)據(jù)庫操作。所提供的參數(shù)將會被綁定到語句中的變量,變量的定義和數(shù)據(jù)庫模塊有關(guān)。

  • .executemany(operation,seq_of_parameters)方法:

準(zhǔn)備和執(zhí)行數(shù)據(jù)庫操作,然后以序列形式的函數(shù)來執(zhí)行該操作。

  • .fetchone()方法:

從查詢結(jié)果中獲取下一行數(shù)據(jù),返回值為一個值的序列,如果沒有更多數(shù)據(jù)則返回None。

  • .fetchmany([size=cursor.arraysize])方法:

從查詢結(jié)果中獲取下一組行數(shù)據(jù),返回值為包含序列的序列,如果沒有數(shù)據(jù)返回時,則返回空序列。每次調(diào)用要獲取的行數(shù)由參數(shù)指定,如果沒有指定行數(shù),則游標(biāo)的arraysize屬性決定要獲取的行數(shù)。

  • .fetchall()方法:

從查詢結(jié)果中獲取所有(或者剩余)行數(shù)據(jù),返回值為包含序列的序列。

  • .nextset()方法:

此方法將游標(biāo)跳到下一個可用的結(jié)果集并丟棄當(dāng)前結(jié)果集的所有行,如果沒有更有查詢結(jié)果集則返回None,否則返回True,接下來的fetch操作將會從新結(jié)果集返回數(shù)據(jù)了。

  • .setinputsizes(sizes)方法:

此方法可用在調(diào)用.execute系列方法之前使用,用于預(yù)定義內(nèi)存區(qū)域。size參數(shù)接收一個序列類型的值,每一個元素對應(yīng)一個輸入?yún)?shù),該元素應(yīng)該是一個類型對象,對于將要使用的參數(shù),或者是一個整數(shù),用于指定字符串的最大長度。如果元素是None,則沒有預(yù)定義的內(nèi)存區(qū)域作為保留區(qū)域。

  • .setoutputsize(size[,column])方法:

為一個很大的列設(shè)置緩沖區(qū)大小,不指定將使用默認(rèn)大小。

三、事務(wù)

事務(wù)是數(shù)據(jù)庫管理系統(tǒng)執(zhí)行過程中的一個邏輯單位,由一個有限的數(shù)據(jù)庫操作序列構(gòu)成,事務(wù)的目的性是為了保證數(shù)據(jù)的一致性。假設(shè)銀行轉(zhuǎn)賬操作,從A賬戶轉(zhuǎn)賬100元到B賬戶需要進(jìn)行至少兩次的數(shù)據(jù)庫修改操作,A賬戶余額需要減少100元,B賬戶余額需要增加100元,如果因為由于外部原因?qū)е鲁绦蛞馔饨K止,就會操作數(shù)據(jù)出錯,事務(wù)就是防止此情況的發(fā)生。

數(shù)據(jù)庫事務(wù)擁有四個特性,習(xí)慣稱之為ACID特性:

1、原子性(Atomicity):事務(wù)作為一個整體被執(zhí)行,包含在其中的對數(shù)據(jù)庫的操作要么全部被執(zhí)行,要么不執(zhí)行。
2、一致性(Consistency):事務(wù)應(yīng)確保數(shù)據(jù)庫的狀態(tài)從一個一致狀態(tài)轉(zhuǎn)變?yōu)榱硪粋€一致狀態(tài),一致狀態(tài)的含義是數(shù)據(jù)庫中的數(shù)據(jù)應(yīng)滿足完整性約束。
3、隔離性(Isolation):多個事務(wù)并發(fā)執(zhí)行時,一個事務(wù)的執(zhí)行不應(yīng)影響其他事務(wù)的執(zhí)行。
4、持久性(Durability):已被提交的事務(wù)對數(shù)據(jù)庫的修改應(yīng)該永久保存在數(shù)據(jù)庫中。

import pprint
import pymysql

host = 'localhost'      # 主機地址
username = 'root'       # 數(shù)據(jù)庫用戶名
password = ''           # 數(shù)據(jù)庫密碼
db_name = 'test'        # 數(shù)據(jù)庫名稱

# 創(chuàng)建connect對象,插入中文時需要指定編碼格式
connect = pymysql.connect(host=host, user=username, password=password, database=db_name, charset='utf8')

# 獲取游標(biāo)對象查詢返回字典
cursor = connect.cursor(pymysql.cursors.DictCursor)

# 正確的插入數(shù)據(jù)的SQL命令
insert_sql1 = '''
INSERT INTO users (name, age)
    VALUES ('羅賓', 18),('喬巴', 16)
'''

# 錯誤的插入數(shù)據(jù)的SQL命令
insert_sql2 = '''
INSERT INTO users (name, age)
    VALUES ('弗蘭奇')
'''

try:
    # 插入數(shù)據(jù)到數(shù)據(jù)表
    cursor.execute(insert_sql1)
    cursor.execute(insert_sql2)
    # 提交任何掛起的事務(wù)到數(shù)據(jù)庫
    connect.commit()
except Exception as e:
    # 執(zhí)行失敗發(fā)送數(shù)據(jù)回滾,回滾到事務(wù)開始時的狀態(tài)
    connect.rollback()

# 查詢數(shù)據(jù)
cursor.execute('SELECT * FROM users')

# 返回全部數(shù)據(jù)
result_all = cursor.fetchall()
print('---fetchall---')
pprint.pprint(result_all)

# 關(guān)閉游標(biāo)
cursor.close()

# 關(guān)閉數(shù)據(jù)庫連接
connect.close()

上例中執(zhí)行了兩條SQL語句,一條正確的一條錯誤的,只要有一個錯誤,兩條都不會生效,rollback方法會回滾當(dāng)前游標(biāo)的所有操作。

到此這篇關(guān)于Python基礎(chǔ)之操作MySQL數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)Python操作MySQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 對python 自定義協(xié)議的方法詳解

    對python 自定義協(xié)議的方法詳解

    今天小編就為大家分享一篇對python 自定義協(xié)議的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python實現(xiàn)文件操作幫助類的示例代碼

    Python實現(xiàn)文件操作幫助類的示例代碼

    在使用Python進(jìn)行業(yè)務(wù)開發(fā)的時候,需要將一些數(shù)據(jù)保存到本地文件存儲,方便后面進(jìn)行數(shù)據(jù)分析展示,本文就來用Python制作一個文件操作幫助類,需要的可以參考一下
    2023-03-03
  • python實現(xiàn)簡易自習(xí)室座位預(yù)約系統(tǒng)

    python實現(xiàn)簡易自習(xí)室座位預(yù)約系統(tǒng)

    本文將結(jié)合實例代碼,介紹python實現(xiàn)簡易自習(xí)室座位預(yù)約系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 探尋python多線程ctrl+c退出問題解決方案

    探尋python多線程ctrl+c退出問題解決方案

    這篇文章主要講述了探尋python多線程ctrl-c退出問題解決方案,需要的朋友可以參考下
    2014-10-10
  • Python面向?qū)ο蟪绦蛟O(shè)計類的封裝與繼承用法示例

    Python面向?qū)ο蟪绦蛟O(shè)計類的封裝與繼承用法示例

    這篇文章主要介紹了Python面向?qū)ο蟪绦蛟O(shè)計類的封裝與繼承用法,結(jié)合實例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計中類的封裝、繼承相關(guān)概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2019-04-04
  • Pycharm中運行程序在Python?console中執(zhí)行,不是直接Run問題

    Pycharm中運行程序在Python?console中執(zhí)行,不是直接Run問題

    這篇文章主要介紹了Pycharm中運行程序在Python?console中執(zhí)行,不是直接Run問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python的sys.path模塊路徑添加方式

    python的sys.path模塊路徑添加方式

    這篇文章主要介紹了python的sys.path模塊路徑添加方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 解決torch.to(device)是否賦值的坑

    解決torch.to(device)是否賦值的坑

    這篇文章主要介紹了解決torch.to(device)是否賦值的坑,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Keras中Conv1D的使用及說明

    Keras中Conv1D的使用及說明

    這篇文章主要介紹了Keras中Conv1D的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python實現(xiàn)JSON反序列化類對象的示例

    Python實現(xiàn)JSON反序列化類對象的示例

    本篇文章主要介紹了Python實現(xiàn)JSON反序列化類對象的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01

最新評論

翁源县| 上蔡县| 儋州市| 剑川县| 长顺县| 康定县| 仁化县| 深泽县| 南丰县| 安泽县| 沙洋县| 黄陵县| 莱州市| 深州市| 田阳县| 南开区| 阿城市| 兴文县| 长武县| 乌拉特后旗| 比如县| 苗栗县| 黄山市| 田林县| 遵义县| 临夏县| 正镶白旗| 樟树市| 宁陕县| 临夏县| 斗六市| 崇信县| 静安区| 新平| 海林市| 兴城市| 贡山| 合山市| 武穴市| 大庆市| 台东县|