目錄python
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
這個參數來關閉這個特性。數據庫
逗號分隔值(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')]) '''
MySQL
與pymysql
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()
有以下方法:
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') '''
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')) '''
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()
MongoDB
和pymongo
import pymongo client = pymongo.MongoClient("localhost",27017) ##傳入地址和端口就夠了 db_list = client.list_database_names() ##該方法是打印數據庫列表 print(db_list)
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)
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
。
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'}
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} '''
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'} '''
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'} '''
$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)