【代码】第5章 数据存储

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)

猜你喜欢

转载自blog.csdn.net/C_Python_/article/details/82958000