數據儲存

JSON

JSON(JavaScript Object Notation, JS 對象標記) 是一種輕量級的數據交換格式。它基於 ECMAScript (w3c制定的js規範)的一個子集,採用徹底獨立於編程語言的文本格式來存儲和表示數據。JSON支持對象(字典)、數組(列表)、整數、浮點數、布爾類型、null類型還有字符串類型等。多個數據之間使用逗號分開。mysql

注意:字符串內容必須使用雙引號,(不能使用單引號),且json本質就是一個字符串。正則表達式

咱們把對象(變量)從內存中變成可存儲或傳輸的過程稱之爲序列化,在Python中叫pickling;序列化以後,就能夠把序列化後的內容寫入磁盤,或者經過網絡傳輸到別的機器上;反過來,把變量內容從序列化的對象從新讀到內存裏稱之爲反序列化,即unpicklingsql

######存儲json######
import json
dic = {"name":"Hermaeus",
       "age":19,
       "hometown":"MeiShan",
       "hobby":"Coding"}

j_dic = json.dumps(dic)   #===> json.dump(dic, f)
f = open("test.json","w")
f.write(j_dic)

f.close()
######加載json######
import json
######存儲json######
f = open("test.json","r")
date = json.loads(f.read()) #===> json.load(f)
print(date)

輸入結果爲:mongodb

{'name': 'Hermaeus', 'age': 19, 'hometown': 'MeiShan', 'hobby': 'Coding'}

注意:json在打印dump的時候,只能存放ASCII的字符,所以會將其中中文等字符進行轉義,這是咱們能夠在傳遞ensure_ascii=False這個參數來關閉這個特性。數據庫

CSV文件處理

逗號分隔值(Comma-Separated Values,CSV,有時也稱爲字符分隔值,由於分隔字符也能夠不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。純文本意味着該文件是一個字符序列,不含必須像二進制數字那樣被解讀的數據。CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最多見的是逗號或製表符。express

寫入

方法一
這種方法,咱們須要建立一個writer對象。以後,咱們可使用writerow寫入一行,或者使用writerows寫入多行。例如:編程

import csv
headers = ["name","age","hometown"]
values = [
    ("Mingle",20,"MeiShan"),
    ("ZhangYi",19,"Chengdou"),
    ("Zhaoli",16,"NanJing")
]
with open("text.csv","w",newline="") as fp:
    writer = csv.writer(fp)
    writer.writerow(headers)
    writer.writerows(values)

這樣就生成了一個叫作text.csv的文件,以下:json

name,age,hometown
Mingle,20,MeiShan
ZhangYi,19,Chengdou
Zhaoli,16,NanJing

方法二
咱們也可使用字典的方式把數據寫入,這時咱們必須藉助DictWriter了,例如:數組

import csv

headers = ["name","age","hometown"]
values = [
    {"name":"Mingle","age":20,"hometown":"Meishan"},
    {"name": "Aaa", "age": 17, "hometown": "NanJing"},
    {"name": "Mm", "age": 21, "hometown": "ShangHai"}
]
with open("text_1.cvs","w",newline="") as fp:
    writer = csv.DictWriter(fp,headers)
    writer.writeheader() ##雖然已經傳入了headers,可是在這裏依然要使用該方法寫入headers
    writer.writerows(values)

讀取

方法一

import csv

with open("text.csv","r") as fp:
    reader = csv.reader(fp)
    tiltles = next(reader)
    print(tiltles)
    for i in reader:
        print(i)

方法二
咱們經過DictReader類來實例一個對象,能夠返回字典類型。

import csv

with open("text.csv","r") as fp:
    reader = csv.DictReader(fp)
    for x in reader:
        print(x)
'''
result:
OrderedDict([('name', 'Mingle'), ('age', '20'), ('hometown', 'MeiShan')])
OrderedDict([('name', 'ZhangYi'), ('age', '19'), ('hometown', 'Chengdou')])
OrderedDict([('name', 'Zhaoli'), ('age', '16'), ('hometown', 'NanJing')])
'''

MySQLpymysql

鏈接

import pymysql

db = pymysql.connect(
    host = "localhost",   ##地址
    user = "root",        
    password = "######",
    db = "mysql",
    port = 3306           ##端口默認3306
)
cursor = db.cursor()      ##獲取遊標
cursor.execute("select * from info")  ##執行命令
data = cursor.fetchone()   ##獲取數據
print(data)
db.close()  ##關閉數據庫

插入數據

import pymysql

db = pymysql.connect(
    host = "localhost",
    user = "root",
    password = "yuanming88",
    db = "text",
    port = 3306
)
cursor = db.cursor()
sql = """
insert into info(id,name,age,hometown) values(02,'aa',18,"Chengduo")
"""
cursor.execute(sql)
db.commit()   ##必需要提交
db.close()

另外一種方法:

import pymysql

db = pymysql.connect(
    host = "localhost",
    user = "root",
    password = "yuanming88",
    db = "text",
    port = 3306
)
cursor = db.cursor()
sql = """
insert into info(id,name,age,hometown) values(%s,%s,%s,%s)
"""
cursor.execute(sql,(3,"bbb",21,"NanJing"))  ##若是不肯定值,能夠這樣傳入
db.commit()
db.close()

查找數據

有以下方法:

  1. fetchone():這個方法每次只會獲取一條數據
import pymysql

db = pymysql.connect(
    host = "localhost",
    user = "root",
    password = "yuanming88",
    db = "text",
    port = 3306
)
cursor = db.cursor()
cursor.execute("select * from info")
data = cursor.fetchone()
print(data)
db.close()
'''
result:
(1, 'Mingle', 20, 'MeiShan')
'''
  1. fetchall():會接收的全部返回結果
import pymysql

db = pymysql.connect(
    host = "localhost",
    user = "root",
    password = "yuanming88",
    db = "text",
    port = 3306
)
cursor = db.cursor()
cursor.execute("select * from info")
data = cursor.fetchall()
print(data)
db.close()
'''
result:
((1, 'Mingle', 20, 'MeiShan'), (2, 'aa', 18, 'Chengduo'), (3, 'bbb', 21, 'NanJing'))
'''
  1. fetchmany(n):能夠返回指定數量的數據
import pymysql

db = pymysql.connect(
    host = "localhost",
    user = "root",
    password = "yuanming88",
    db = "text",
    port = 3306
)
cursor = db.cursor()
cursor.execute("select * from info")
data = cursor.fetchmany(2)
print(data)
db.close()
'''
reslut:
((1, 'Mingle', 20, 'MeiShan'), (2, 'aa', 18, 'Chengduo'))
'''

刪除數據

import pymysql

db = pymysql.connect(
    host = "localhost",
    user = "root",
    password = "yuanming88",
    db = "text",
    port = 3306
)
cursor = db.cursor()
cursor.execute("delete from info where id=3")
db.commit()
db.close()

更新數據

import pymysql

db = pymysql.connect(
    host = "localhost",
    user = "root",
    password = "yuanming88",
    db = "text",
    port = 3306
)
cursor = db.cursor()
cursor.execute("update info set name = 'cc' where id = 1")
db.commit()
db.close()

MongoDBpymongo

創建鏈接

import pymongo
client = pymongo.MongoClient("localhost",27017) ##傳入地址和端口就夠了
db_list = client.list_database_names() ##該方法是打印數據庫列表
print(db_list)

插入

  1. insert_one方法
import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test'] ##先獲取該集合
mycol = mydb['subtest']
mydict = {
    'name':'MM',
    'age':13,
    'hometown':'BeiJing'
}
mycol.insert_one(mydict)
  1. insert_many方法
import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test']
mycol = mydb['subtest']
mydict = [
    {'name':"YY",'age':19,'hometown':'ShangHai'},
    {'name':'BB','age':20,'hobby':"reading"},
    {'name':'GG','age':16,'sex':'male'}
]
mycol.insert_many(mydict)

固然,咱們也能夠本身指定_id

數據查詢

  1. find_one方法
import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test']
mycol = mydb['subtest']
rep = mycol.find_one()
print(rep)
#{'_id': ObjectId('5cb474f9839d11a1a366c66b'), 'name': 'yuan'}
  1. find()方法
    該方法是查詢集合中全部的數據
import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test']
mycol = mydb['subtest']
rep = mycol.find()
for r in rep:
    print(r)
'''
result:
{'_id': ObjectId('5cb474f9839d11a1a366c66b'), 'name': 'yuan'}
{'_id': ObjectId('5cb47545839d11a1a366c66c'), 'name': 'LiSa', 'age': 18.0, 'hometown': 'Chengduo'}
{'_id': ObjectId('5cb4921534ddc820d0822c79'), 'name': 'MM', 'age': 13, 'hometown': 'BeiJing'}
{'_id': ObjectId('5cb4941034ddc83720aeb5a7'), 'name': 'YY', 'age': 19, 'hometown': 'ShangHai'}
{'_id': ObjectId('5cb4941034ddc83720aeb5a8'), 'name': 'BB', 'age': 20, 'hobby': 'reading'}
{'_id': ObjectId('5cb4941034ddc83720aeb5a9'), 'name': 'GG', 'age': 16, 'sex': 'male'}
'''

篩選

import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test']
mycol = mydb['subtest']
rep = mycol.find({},{'_id':0,'name':1,'age':1})
##1指定顯示,反之這不現實,_id要單獨設置關閉
for r in rep:
    print(r)
'''
result:
{'name': 'yuan'}
{'name': 'LiSa', 'age': 18.0}
{'name': 'MM', 'age': 13}
{'name': 'YY', 'age': 19}
{'name': 'BB', 'age': 20}
{'name': 'GG', 'age': 16}
'''
  1. 根據條件查詢
import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test']
mycol = mydb['subtest']
rep = mycol.find({'age':20}) ##指定查詢age爲20的數據
for r in rep:
    print(r)
'''
result:
{'_id': ObjectId('5cb4941034ddc83720aeb5a8'), 'name': 'BB', 'age': 20, 'hobby': 'reading'}
'''
  1. 指定條數查詢
import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test']
mycol = mydb['subtest']
rep = mycol.find().limit(3) #指定只查詢前3條數據
for r in rep:
    print(r)
'''
result:
{'_id': ObjectId('5cb474f9839d11a1a366c66b'), 'name': 'yuan'}
{'_id': ObjectId('5cb47545839d11a1a366c66c'), 'name': 'LiSa', 'age': 18.0, 'hometown': 'Chengduo'}
{'_id': ObjectId('5cb4921534ddc820d0822c79'), 'name': 'MM', 'age': 13, 'hometown': 'BeiJing'}
'''
  1. 修飾符查詢
    • $all:匹配那些指定鍵的鍵值中包含數組,並且該數組包含條件指定數組的全部元素的文檔。{field: { $all: [ <value> , <value1> ... ] }
    • $gt:匹配鍵值大於指定值的全部文檔。{field: {$gt: value} }
    • $gte:匹配鍵值不小於指定值的全部文檔。{field: {$gte: value} }
    • $lt:匹配鍵值小於指定值的全部文檔。{field: {$lt: value} }
    • $lte:匹配鍵值不大於指定值的全部文檔。{field: {$lte: value} }
    • $in:匹配鍵值等於指定數組中任意值的文檔。{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
    • $nin:匹配鍵不存在或者鍵值不等於指定數組的任意值的文檔。{ field: { $nin: [ <value1>, <value2> ... <valueN> ]} }
    • $ne:匹配鍵值不等於指定值的文檔。{field: {$ne: value} }
    • $and:and指定一個至少包含兩個表達式的數組,選擇出知足該數組中全部表達式的文檔。{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }
    • $nor:$nor執行邏輯NOR運算,指定一個至少包含兩個表達式的數組,選擇出都不知足該數組中全部表達式的文檔。{ $nor: [ { <expression1> }, { <expression2> }, ... { <expressionN> } ] }
    • $not:$not執行邏輯NOT運算,選擇出不能匹配表達式的文檔 ,包括沒有指定鍵的文檔。{ field: { $not: { <operator-expression> } } }
    • $or:$or執行邏輯OR運算,指定一個至少包含兩個表達式的數組,選擇出至少知足數組中一條表達式的文檔。{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test']
mycol = mydb['subtest']
rep = mycol.find({"age":{'$lte':16}})
for r in rep:
    print(r)
'''result:
{'_id': ObjectId('5cb4921534ddc820d0822c79'), 'name': 'MM', 'age': 13, 'hometown': 'BeiJing'}
{'_id': ObjectId('5cb4941034ddc83720aeb5a9'), 'name': 'GG', 'age': 16, 'sex': 'male'}
'''

正則表達式查詢

import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test']
mycol = mydb['subtest']
rep = mycol.find({"name":{'$regex':'^[yY]'}}) #咱們須要使用$regex來指定
for r in rep:
    print(r)

方法一:使用update_one,修改一條數據

import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test']
mycol = mydb['subtest']
upd = {'name':'yuan'}  ##設定修改的範圍條件
upd_v = {'$set':{'name':'Zz'}}  ##使用$set關鍵字修改
mycol.update_one(upd,upd_v)

方法二:使用update_many,修改多條信息

import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test']
mycol = mydb['subtest']
upd = {'name':{'$regex':'^[yY]'}} ##設定修改的範圍條件
upd_v = {'$set':{'age':22}}
mycol.update_one(upd,upd_v)

刪除

方法一:咱們可使用delete_one()方法來刪除一個文檔,該方法第一個參數爲查詢對象,指定要刪除哪些數據。

import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test']
mycol = mydb['subtest']
de_v = {"name":"Zz"}  ##指定刪除的條件
mycol.delete_one(de_v)

方法二:咱們可使用delete_many來刪除多個值

import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test']
mycol = mydb['subtest']
de_v = {"name":{"$regex":"^[BG]"}}
mycol.delete_many(de_v)

刪除集合

import pymongo
client = pymongo.MongoClient("localhost",27017)
mydb = client['test']
mycol = mydb['subtest']
mycol.drop()

排序

sort()方法第一個參數爲要排序的字段,第二個字段指定排序規則,1爲升序,-1爲降序,默認爲升序。

import pymongo
 
myclient = pymongo.MongoClient("localhost",27017)
mydb = myclient["test"]
mycol = mydb["subtest"]
mydoc = mycol.find().sort("alexa", -1)
for x in mydoc:
  print(x)
相關文章
相關標籤/搜索