第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

Python 進(jìn)階應(yīng)用教程

Python 進(jìn)階應(yīng)用教程
01 Python 的對(duì)象和類 02 Python 類屬性和實(shí)例屬性 03 Python類的構(gòu)造方法、析構(gòu)方法、實(shí)例方法 04 Python 類的私有屬性和私有方法 05 Python 類的繼承和多繼承 06 Python 類實(shí)戰(zhàn) 07 Python 中的迭代器實(shí)現(xiàn)原理 08 Python 中的迭代器趣味實(shí)踐 09 Python 中的生成器實(shí)現(xiàn)原理 10 Python 中的生成器趣味實(shí)踐 11 Python 中的錯(cuò)誤和異常 12 Python 中的異常處理 13 Python 中的模塊 14 Python 標(biāo)準(zhǔn)庫之 os 模塊 15 Python 標(biāo)準(zhǔn)庫之 sys 模塊 16 Python 標(biāo)準(zhǔn)庫之 math 模塊 17 Python 標(biāo)準(zhǔn)庫之 random 模塊 18 Python 標(biāo)準(zhǔn)庫之 Json 模塊 19 Python 標(biāo)準(zhǔn)庫 datetime 模塊 20 Python 中的常用第三方模塊 21 Python 中的命名空間 22 Python 中的作用域 23 Python 中的文件 IO 操作 24 Python 基礎(chǔ)實(shí)戰(zhàn) 25 Python 內(nèi)置函數(shù) 26 Python 中使用正則表達(dá)式 27 使用 Python 操作 MySQL 數(shù)據(jù)庫 28 使用 Python 操作 Mongo 數(shù)據(jù)庫 29 使用 Python 操作 Redis 數(shù)據(jù)庫 30 使用 Python 發(fā)送一封郵件 31 threading 之 Thread 的使用 32 threading 之 Lock 的基本使用 33 Python 生產(chǎn)者消費(fèi)者模型 34 Python 的內(nèi)存管理與垃圾回收 35 Python 領(lǐng)域運(yùn)用:網(wǎng)絡(luò)爬蟲 36 Python 領(lǐng)域運(yùn)用:Web 開發(fā) 37 Python 領(lǐng)域運(yùn)用:自動(dòng)化運(yùn)維 38 Python 領(lǐng)域運(yùn)用:自動(dòng)化測(cè)試

1. 簡(jiǎn)介

MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫,旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。MongoDB 是一個(gè)介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,它支持的查詢語言非常強(qiáng)大,其語法類似于面向?qū)ο蟮牟樵冋Z言,可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能。

Python 程序要訪問 MongoDB,需要使用第三方模塊 pymongo。

2. 安裝 pymongo

pymongo 是 python 訪問 mysql 數(shù)據(jù)庫的模塊。首先檢查是否已經(jīng)安裝了 pymongo 模塊,在 python 交互模式下 import pymongo,如下所示:

>>> import pymongo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'pymongo'

如果出現(xiàn)錯(cuò)誤:ModuleNotFoundError,則表示還沒有安裝 pymongo,使用 pip3 install mysql 安裝 pymongo,如下所示:

$ pip3 install pymongo
Collecting pymongo
...
Installing collected packages: pymongo
Successfully installed pymongo-3.10.1

3. 啟動(dòng) MongoDB

在 MonoDB 中創(chuàng)建數(shù)據(jù)庫 school,在后面的小節(jié)中,將對(duì)數(shù)據(jù)庫 school 進(jìn)行增刪改查。輸入如下命令啟動(dòng) MongoDB:

$ mkdir school
$ mongod --dbpath=./school >/dev/null
  • 在第 1 行,創(chuàng)建目錄 school,用于存放 MongoDB 數(shù)據(jù)庫 school 的內(nèi)容
  • 在第 2 行,啟動(dòng) MongoDB 的服務(wù),指定 dbpath 為目錄 school

4. 連接數(shù)據(jù)庫

pymongo.MongoClient 方法連接 MongoDB,返回一個(gè) MongoCLient 對(duì)象,示例如下:

import pymongo

def open_db():
    global mongo
    global school
    global students

    mongo = pymongo.MongoClient('mongodb://localhost')
    school = mongo['school']
    students = school['students']    
  • 在第 1 行,引入 pymongo 模塊
  • 在第 3 行,定義方法 open_db() 連接 MongoDB,后面的例子會(huì)引用該方法
  • 在第 4 行到第 6 行,聲明 3 個(gè)全局變量
    • mongo 是連接 MongoDB 的對(duì)象
    • school 是 MongoDB 中的數(shù)據(jù)庫
    • students 是 MongoDB 中的表
  • 在第 8 行,使用 ‘mongodb://localhost’ 作為 url 連接本地的 MongoDB
  • 在第 9 行,在 MongoDB 中創(chuàng)建數(shù)據(jù)庫 school
  • 在第 10 行,在數(shù)據(jù)庫 school 中創(chuàng)建表 students

5. 列出數(shù)據(jù)

MongoDB 的表提供了 find() 方法,查詢表中的所有數(shù)據(jù),類似 SQL 中的 SELECT * 操作:

def list_students():
    for student in students.find():
        print(student)
  • 在第 1 行,定義方法 list_students() 列出所有的學(xué)生的信息,后面的例子會(huì)引用該方法
  • 在第 2 行,students.find() 查詢表 students 中所有的數(shù)據(jù)

6. 增加數(shù)據(jù)

6.1 增加一條數(shù)據(jù)

MongoDB 的表提供了 insert() 方法,向表中插入一條數(shù)據(jù):

def add_one_student(sno, name, age):
    student = {'sno': sno, 'name': name, 'age': age}
    students.insert_one(student)
  • 在第 1 行,函數(shù) add_one_student 向表 students 增加一個(gè)學(xué)生
  • 在第 2 行,構(gòu)造一個(gè)字典對(duì)象 student
  • 在第 3 行,將字典 student 插入到表 students 中

編寫測(cè)試程序如下:

add_one_student('1', 'tom', 11)
add_one_student('2', 'jerry', 12)
list_students()

程序運(yùn)行輸出如下:

{'_id': ObjectId('5ee328013ee9af43360b7a65'), 'sno': '1', 'name': 'tom', 'age': 11}
{'_id': ObjectId('5ee328013ee9af43360b7a66'), 'sno': '2', 'name': 'jerry', 'age': 12}

6.2 增加多條數(shù)據(jù)

MongoDB 的表提供了 insert_many() 方法,向表中插入多條數(shù)據(jù):

def add_many_students():
    tom = {'sno': '1', 'name': 'tom', 'age': 11}
    jerry = {'sno': '2', 'name': 'jerry', 'age': 12}
    array = [tom, jerry]
    students.insert_many(array)
  • 在第 1 行,函數(shù) add_many_students 向表 students 增加多個(gè)學(xué)生
  • 在第 2 行,構(gòu)造一個(gè)字典對(duì)象 tom
  • 在第 3 行,構(gòu)造一個(gè)字典對(duì)象 jerry
  • 在第 5 行,將學(xué)生 tom 和學(xué)生 jerry 插入到表 students 中

編寫測(cè)試程序如下:

add_many_students()
list_students()

程序運(yùn)行輸出如下:

{'_id': ObjectId('5ee3281b673bfa2333f3c1f1'), 'sno': '1', 'name': 'tom', 'age': 11}
{'_id': ObjectId('5ee3281b673bfa2333f3c1f2'), 'sno': '2', 'name': 'jerry', 'age': 12}

6.3 用于測(cè)試的數(shù)據(jù)

編寫函數(shù) add_students_for_test,向表 students 中插入 4 條數(shù)據(jù)用于測(cè)試,在后面的小節(jié)將引用這個(gè)函數(shù)。

def add_students_for_test():
    add_one_student('1', '張三', 11)
    add_one_student('2', '李四', 12)
    add_one_student('3', '王五', 13)
    add_one_student('4', '李四', 14)

7. 修改數(shù)據(jù)

7.1 修改一條數(shù)據(jù)

MongoDB 的表提供了 update_one() 方法,修改表中符合查詢條件的第一條數(shù)據(jù):

def update_one_student(sno, name):
    condition = {'sno': sno}
    value = {'$set': {'name': name}}
    students.update_one(condition, value)
  • 在第 2 行,設(shè)置查詢條件為學(xué)號(hào) sno
  • 在第 3 行,修改查詢結(jié)果的姓名 name
  • 在第 4 行,查詢表 students 中學(xué)號(hào)為 sno 的學(xué)生,修改符合查詢條件的第一個(gè)學(xué)生的姓名 name

編寫測(cè)試程序如下:

add_students_for_test()
update_one_student('1', 'ZhangSan')
update_one_student('2', 'LiSi')
list_students() 
  • 在第 2 行,查找學(xué)號(hào)為 ‘1’ 的學(xué)生,將其姓名 name 修改為 ‘ZhangSan’
  • 在第 3 行,查找學(xué)號(hào)為 ‘2’ 的學(xué)生,將其姓名 name 修改為 ‘LiSi’

程序運(yùn)行輸出如下:

{'_id': ObjectId('5ee3284f14c80d192f214ea0'), 'sno': '1', 'name': 'ZhangSan', 'age': 11}
{'_id': ObjectId('5ee3284f14c80d192f214ea1'), 'sno': '2', 'name': 'LiSi', 'age': 12}
{'_id': ObjectId('5ee3284f14c80d192f214ea2'), 'sno': '3', 'name': '王五', 'age': 13}
{'_id': ObjectId('5ee3284f14c80d192f214ea3'), 'sno': '4', 'name': '李四', 'age': 14}

7.2 修改多條數(shù)據(jù)

MongoDB 的表提供了 update_many() 方法,修改表中符合查詢條件的所有數(shù)據(jù):

def update_many_students(old_name, new_name):
    condition = {'name': old_name}
    value = {'$set': {'name': new_name}}
    students.update_many(condition, value)
  • 在第 2 行,設(shè)置查詢條件為姓名 name
  • 在第 3 行,修改查詢結(jié)果的姓名 name
  • 在第 4 行,查詢表 students 中姓名為 name 的學(xué)生,修改所有符合查詢條件學(xué)生的姓名 name

編寫測(cè)試程序如下:

add_students_for_test()
update_many_students('李四', 'LiSi')
list_students()
  • 在第 2 行,查找姓名為 ‘李四’ 的學(xué)生,將其姓名 name 修改為 ‘LiSi’

程序運(yùn)行輸出如下:

{'_id': ObjectId('5ee328758ab7b33517380c8f'), 'sno': '1', 'name': '張三', 'age': 11}
{'_id': ObjectId('5ee328758ab7b33517380c90'), 'sno': '2', 'name': 'LiSi', 'age': 12}
{'_id': ObjectId('5ee328758ab7b33517380c91'), 'sno': '3', 'name': '王五', 'age': 13}
{'_id': ObjectId('5ee328758ab7b33517380c92'), 'sno': '4', 'name': 'LiSi', 'age': 14}

8. 刪除數(shù)據(jù)

8.1 刪除一條數(shù)據(jù)

MongoDB 的表提供了 delete_one() 方法,刪除表中符合查詢條件的第一條數(shù)據(jù):

def delete_one_student(sno):
    student = {'sno': sno}
    students.delete_one(student)
  • 在第 2 行,設(shè)置查詢條件為學(xué)號(hào) sno
  • 在第 3 行,查詢表 students 中學(xué)號(hào)為 sno 的學(xué)生,刪除符合查詢條件的第一個(gè)學(xué)生

編寫測(cè)試程序如下:

add_students_for_test()
delete_one_student('1')
delete_one_student('2')
list_students()
  • 在第 2 行,刪除學(xué)號(hào)為 ‘1’ 的學(xué)生
  • 在第 3 行,刪除學(xué)號(hào)為 ‘2’ 的學(xué)生

程序運(yùn)行輸出如下:

{'_id': ObjectId('5ee328a441b99d0ffd2127ab'), 'sno': '3', 'name': '王五', 'age': 13}
{'_id': ObjectId('5ee328a441b99d0ffd2127ac'), 'sno': '4', 'name': '李四', 'age': 14}

8.2 刪除多條數(shù)據(jù)

MongoDB 的表提供了 delete_many() 方法,刪除表中所有符合查詢條件的數(shù)據(jù):

def delete_many_students(name):
    student = {'name': name}
    students.delete_many(student)
  • 在第 2 行,設(shè)置查詢條件為姓名 name
  • 在第 3 行,查詢表 students 中姓名為 name 的學(xué)生,刪除所有符合查詢條件的學(xué)生

編寫測(cè)試程序如下:

add_students_for_test()
delete_many_students('李四')
list_students()

程序運(yùn)行輸出如下:

{'_id': ObjectId('5ee328d182f2558674a683db'), 'sno': '1', 'name': '張三', 'age': 11}
{'_id': ObjectId('5ee328d182f2558674a683dd'), 'sno': '3', 'name': '王五', 'age': 13}

8.3 刪除所有數(shù)據(jù)

如果如果傳遞給 delete_many() 一個(gè)空的查詢對(duì)象,則刪除表中所有的數(shù)據(jù):

def delete_all_students():
    student = {}
    students.delete_many(student)

編寫測(cè)試程序如下:

add_students_for_test()
delete_all_students()
list_students()

將數(shù)據(jù)全部刪除了,程序輸出為空。