目录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)