5.1.2 json
# !/user/bin/python
# coding=utf-8
import json
info = {
'name': '王伟',
'gender': '难',
'birthday': '1992-10-08'
}
with open('512.json','w', encoding='utf-8') as file:
file.write(json.dumps(info, indent=2, ensure_ascii=False))
# indent加入缩进
# 避免ASCII/Unicode码字符
with open('512.json', 'r', encoding='utf-8') as file2:
# 如果不加则报错,UnicodeDecodeError: 'gbk' codec can't decode byte 0xbe
# 可见这里文件读写默认用gb2312编码
print(file2.read())
5.2 mysql 数据库
import pymysql
# 连接mysql数据库 代码比较乱,不可全部执行,仅供学习
db = pymysql.connect(
host='localhost',
user='root',
password='123456',
port=3306,
db='spiders'
)
cursor = db.cursor()
# 版本
cursor.execute('select version()')
data = cursor.fetchone()
print('db version:', data)
# 创建数据库,这里写成 utf-8 报错,注意要去掉'-'
cursor.execute("create database spiders default character set utf8")
# 创建表
sql = "create table if not exists students (id varchar(255) not null, " \
"name varchar(255) not null, age int not null, primary key (id))"
cursor.execute(sql)
db.close()
# 插入数据
db = pymysql.connect(
host='localhost',
user='root',
password='123456',
port=3306,
db='spiders'
)
data = {
'id': '12',
'name': 'Jay',
'age': 23
}
table = 'students'
keys = ','.join(data.keys())
# 动态长度字典的格式化,这个用法6
values = ','.join(['%s']*len(data))
cur = db.cursor()
sql2 = 'insert into {table}({keys}) values({values})'.format(table=table, keys=keys, values=values)
try:
cur.execute(sql2, tuple(data.values())) # 元组格式化传入
db.commit()
except:
db.rollback()
print('rollback')
db.close()
# 更新数据
db = pymysql.connect(
host='localhost',
user='root',
password='123456',
port=3306,
db='spiders'
)
data = {
'id': '12',
'name': 'Bob',
'age': 19
}
table = 'students'
keys = ','.join(data.keys())
values = ','.join(['%s']*len(data))
cur = db.cursor()
sql = 'insert into {table}({keys}) values({values}) on duplicate key update'\
.format(table=table, keys=keys, values=values)
update = ','.join(["{key}=%s".format(key=key) for key in data])
sql = sql + " " + update # 注意此处原文错误,需要加上空格' ',否则语法错误
print(sql)
try:
if cur.execute(sql, tuple(data.values())*2):
print('update success.')
db.commit()
except:
print('update fail.')
db.rollback()
db.close()
5.3.1 MongoDB 数据库
import pymongo
client = pymongo.MongoClient(host='localhost', port=27017)
db = client.test
collection = db.students
# 字典的列表
data = [
{
'id': '12',
'name': 'Bob',
'age': 12
},
{
'id': '13',
'name': 'Bob',
'age': 17
},
{
'id': '13',
'name': 'Bob',
'age': 11
}
]
# 插入
# result = collection.insert_many(data)
# print(result)
# print(result.inserted_ids)
# 查询
# search_result = collection.find({'age': 14})
# print([result for result in search_result])
# 排序
# sort_results = collection.find().sort('age', pymongo.ASCENDING)
# print([result['age'] for result in sort_results])
# 更新
# condition ={'name': 'Bob'}
# student = collection.find_one(condition)
# student['age'] = 10
# 这里 .update_one 改成 .update_many 提示错误: _id 不可修改
# result = collection.update_one(condition, {'$set': student})
# print(result.matched_count, result.modified_count)
# 删除
# result = collection.delete_many({'age':{'$gt': 15}})
# print(result.deleted_count)