我的电脑的系统Path:
 
D:\sqlite;D:\Program Files\MongoDB\Server\3.4\bin;%MYSQL_HOME%\bin;D:\Program Files\Browser\Python 3.6\;D:\Program Files\Browser\Python 3.6\Scripts\;C:\Program Files (x86)\Work\SSH Secure Shell;C:\Program Files (x86)\Microsoft Office\Fiddler
****************************************分割线****************************************
安装MongoDB:
 
www.mongodb.com/download-center#community下载.msi安装包→
自定义安装时把路径首的盘符C改为D,其他如Server\3.x等可不改→
手动创建日志文件D:\Program Files\MongoDB\log\mongodb.log;数据目录D:\Program Files\MongoDB\data→
D:\Program Files\MongoDB\Server\3.4\bin下按Shift+右键进入命令窗口→
mongod --logpath "D:\Program Files\MongoDB\log\mongodb.log" --dbpath "D:\Program Files\MongoDB\data" --install --serviceName "MongoDB"
(卸载前的移除是--remove)→net start mongodb(关闭是stop)→浏览器打开http://localhost:27017
 
cmd直接用mongo:把这串加入系统环境path:D:\Program Files\MongoDB\Server\3.4\bin;
*******************分割线*******************
PyCharm装了Mongo Plugin插件(setting→Plugins→Browse repositories→Mongo Plugin),右端Mongo Explorer点开是空白:Mongo Settings扳手→+→Lable如Cheng→OK;

打开数据表后,点击右上角的View as table按钮,把树型改为表型
*******************分割线*******************
mongodb使用范例:(爬取花椒直播)
 
import requests, re
from bs4 import BeautifulSoup
from pymongo import MongoClient
 
client = MongoClient('localhost',27017)    #port是int型;host和port用默认的也可省略不写
db = client.花椒    #或client['花椒'];Mongodb中若无此数据库,则自动创建
table = db.主播信息    #或db['主播信息']
 
def getLiveId(urlOfAnchors):
    liveIds = set()
    html = requests.get(urlOfAnchors).text
    soup = BeautifulSoup(html, 'lxml')
    # 正则元字符^后面的(),不再表示group(n),而表示开头是一串内容
    for link in soup('a', href=re.compile('^(/l/)')):
        liveId = link['href'].split('/')[-1]
        liveIds.add(liveId)
    return liveIds
 
def getUserId(liveId):
    liveUrl = f'http://www.huajiao.com/l/{liveId}'
    html = requests.get(liveUrl).text
    soup = BeautifulSoup(html, 'lxml')
    title = soup.title.get_text()
    return re.findall('\d+', title)[0]
 
def getUserData(userId):
    print(f'正在获取id为:{userId}的主播信息')
    html = requests.get(f'http://www.huajiao.com/user/{userId}').text
    soup = BeautifulSoup(html, 'lxml')
    userInfo = soup.find('div', id='userInfo')
    data = {}
    data['userId'] = userId
    data['headPhoto'] = userInfo.find('div','avatar').img['src']
    data['userName'],data['area'] = userInfo.h3.get_text('|',strip=True).split('|')[::2][:2]
    tmp = userInfo.find('ul', 'clearfix').get_text('|', strip=True).split('|')
    data['fans'],data['thumbsUp'],data['gift'],data['expense'] = tmp[::2][:4]
    return data
 
def saveUserData(userData):
    table.save(userData)
    print(f"主播{userData['userName']}的信息已保存")
 
if __name__ == '__main__':
    urlOfAnchors = 'http://www.huajiao.com/category/1000'
    liveIds = getLiveId(urlOfAnchors)
    for liveId in liveIds:
        userId = getUserId(liveId)
        try:  # getUserId()有些liveUrl打开较慢,跳过它们
            userData = getUserData(userId)
            saveUserData(userData)
        except:
            pass
*******************分割线*******************
查询输出之法1——PyCharm中print:
 
from pymongo import MongoClient
 
client = MongoClient('localhost', 27017)
db = client.花椒
table = db.主播信息
 
rows = table.find()
for item in rows:
    print(item)    #print(item.keys());item['userName']
 
查询输出之法2——控制台:
打开cmd,依次输入后回车:mongo;show databases;use 花椒;show tables;db.主播信息.count();db.主播信息.findOne();db.主播信息.find()
****************************************分割线****************************************
mysql 5.7.19:
 
1、安装&配置:
①下载包解压到E:\mysql-5.7.19-winx64→环境变量の系统变量の新建:变量名MYSQL_HOME,变量值E:\mysql-5.7.19-winx64→用户变量的Path尾添加个;%MYSQL_HOME%\bin→E:\mysql-5.7.19-winx64\bin下建个my.ini文件(老版本不必;内容在文末);
②管理员身份打开cmd并切到bin目录下(下文各命令都是在此目录执行):mysqld.exe -install(提示:Service successfully installed)→mysqld --initialize-insecure --user=mysql(初始化时创建个空密码的root);
③net start mysql→mysqladmin -u root -p password 新密码如ChengYong→Enter password:(若旧密码为空则直接回车)→net stop mysql(卸载mysql是mysqld --remove)
 
2、使用:
法①のcmd:net start mysql→mysql -u root -p→Enter password:新密码(…操作示例:mysql>show databases;或mysql>select 语句…;)→mysql>quit;→net stop mysql
 
法②のNavicat:net start mysql→打开软件Navicat→连接MySQL→除密码外随意(不过Navicat中的localhost只在联网时被DNS解析为127.0.0.1,断网用此软件,主机名得用127.0.0.1)→连接测试。
 
若插入的数据含QQ表情,则新建数据库时(或右键目标库选数据库属性),字符集选末尾的utf8mb4。
 
查看数据库信息、表、字段:右键库名选命令列界面→①show create database 库名;②show create table 表名;③desc 某字段名;
 
添加用户:用户图标→新建用户→主机名为localhost,密码可空→保存按钮;权限管理员→选择左侧的连接名或下一级的某库名→添加权限→左侧勾选新用户→右键授予选全部授予→确定。
 
3、my.ini里的内容:
[client]
port=3306
default-character-set=utf8mb4
[mysqld]
port=3306
character_set_server=utf8mb4
basedir=%MYSQL_HOME%
datadir=%MYSQL_HOME%\data
[WinMySQLAdmin]
%MYSQL_HOME%\bin\mysqld.exe
*******************分割线*******************
MySQL:
 
连库相关:
 
pymysql(或MySQLdb)异于django的DATABASES:port值非str是int;库名非name叫db;加charset参数。
连接个事先手动创建的utf8mb4库,否则作用于字段的charset无效,如表般被库的默认编码硬统一了。用utf8mb4而非utf8,因为MySql中的utf8编码有bug,没能覆盖unicode字符。
 
若数据库非要用代码创建,则要在代码中分别指定数据库、表及字段的编码;麻烦不建议:
self.cur.execute('create database if not exists myDB default charset utf8mb4')
self.conn.set_character_set('utf8mb4')  #字段的编码:MySQLdb行,pymysql无此属性
self.conn.select_db('myDB')    #或self.cur.execute('use myDB');若connect时没加db
self.cur.execute('create table if not exists xs(name varchar(10),role text)')。
******分割线******

SQL相关:

 
①SQL语句除set赋值外,where等值判断也是用的一个=,而非Python中的==;
②增删改查的前3个insert into t() values()、delete from t where…、update t set…where…,都是1句cur.execute(SQL),加1句conn.commit();或合并为1句conn.commit(cur.execute(SQL))。只有select…from t where…,第2句是cur.fetch…();或合并为1句cur.fetch…(cur.execute(SQL))。
 
避免重复插入记录时报错:
①:insert ignore into t() values();
②:replace into t(各字段) values(各值);
③:for row in rows:sql=f'insert into t(a,b,c) values({row[0:3]}) on duplicate key update b=b+1,c={row[2]}'
 
格式化方式{},Sqlite和MySQL这两种数据库都支持;Sqlite还支持?,MySQL还支持%s。
SQL中各%s所对应的值,若和SQL字串写在一句内,则各%s要套引号;若写在execute…()的2参,即execute(sql,(*,*)),或多组的executemany(sql,[(*,*),(*,*)]),各%s两边无"。2参中,同一条记录的多个字段的值写在tuple内,而多条记录写在list内。

******分割线******

示例:
 
import pymysql
 
class MySQLExample:
    def __init__(self):
        self.conn=pymysql.connect(host='localhost', port=3306, user='chengy', password='',
            db='myDB', charset='utf8mb4')  #password或passwd,database或db均可
        self.cur=self.conn.cursor(pymysql.cursors.DictCursor)  #fetch…默认((),(),),改用[{},{},]
 
    def operateDatabase(self):
        增='insert into xs(name,role) value(%s,%s)'    #value或values均可
        多条记录=[('张三','学生'),('李四','学生'),('李刚','家长'),('王丽','老师')]
        self.cur.executemany(增,多条记录)    #插入效率,executemany比execute高
        删='delete from xs where role="老师"'  #删除所有的老师
        改='update xs set role="校长" where name="李刚"'    #更改所有的李刚的角色
        self.cur.execute(删)
        self.cur.execute(改)
        self.conn.commit()  #self.conn.rollback()
 
        查='select * from xs where name="张三"'
        self.cur.execute(查)
        if self.cur.rowcount != 0:  #如果这条select查询有记录返回
            指针当前所移动至的记录的id字段 = self.cur.fetchone()['id']  #fetchmany(5)
            self.cur.scroll(0,'absolute')   #执行fetchone()或fetchmany(n)后指针↓了,移回原点
            print(self.cur.fetchall())
 
    def closeDatabase(self):
        self.cur.close()
        self.conn.close()
 
xs=MySQLExample()
xs.operateDatabase()
xs.closeDatabase()
****************************************分割线****************************************
prettytable:可把等长()的[],即[(),(),()…]显示为MySQL风格的表,似Mongo插件。
 
Egの取甲丙丁这3列的前7行,按丙列降序,右对齐除了甲列左对齐,首列红色尾列橙色:
import numpy
from prettytable import PrettyTable
from colorama import Fore,init
init(convert=True)  #输出在:Win控制台启用本句,其他系统和PyCharm则注释
 
pt=PrettyTable(list('甲乙丙丁'),fields=list('甲丙丁'),start=0,end=7,sortby='丙',reversesort=True)
pt.align='r';pt.align['甲']='l'
matrix=numpy.random.randint(1,4000,[9,4])
[pt.add_row(row) for row in matrix]
for row in pt._rows:
    row[0]=Fore.RED+str(row[0])+Fore.RESET
    row[-1]=Fore.YELLOW+str(row[-1])+Fore.RESET
print(matrix,pt,sep='\n')

MongoDB、MySQL的更多相关文章

  1. Docker安装MongoDB、MySQL、Jenkins、Gitlab、Nginx

    Docker安装MongoDB.MySQL.Jenkins.Gitlab.Nginx 安装MongoDB 1. 拉取镜像 $ sudo docker pull mongo 2. 运行镜像 $ sudo ...

  2. python操作MongoDB、MySQL、Postgres、Sqlite、redis实例

    总结:除了MongoDB.redis,其他三个数据库用python来操作其实是差不多的.所有例子都很简单,实际生产环境中的数据库操作远比这复杂得多,命令也比我例子中的多得多,我这里高级一点的用法就是批 ...

  3. 常用工具说明--mongodb、mysql解压版、IDEA配置maven

    Mongodb的安装.配置 1.去官网下载mongodb安装包,mongodb官网.点击右上角的 Download,下载对应的msi安装包 2.安装程序,选择 Custom,自定义安装路径,比如安装在 ...

  4. 94、存储库之MongoDB、mysql

    本篇导航: 简介 MongoDB基础知识 安装 基本数据类型 CRUD操作 其它 存储库之mysql   一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库1.易用性 MongoDB是 ...

  5. 存储库之MongoDB、mysql

    本篇导航: 简介 MongoDB基础知识 安装 基本数据类型 CRUD操作 其它 存储库之mysql   一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库1.易用性 MongoDB是 ...

  6. JB的IDE可视化MongoDB、MySQL数据库信息

    一.问题: 在使用JB的IDE的时候(pycharm.IDEA等)可视化mysql和mongodb的数据库信息,效果如下 MySQL: MongoDB:  可视化数据表关系: 二.方法: 1.MySQ ...

  7. Docker 安装环境(redis、mongodb、mysql等)

    Docker下载地址 [ https://download.docker.com/win/stable/Docker%20Desktop%20Installer.exe ] 一.创建/启动 redis ...

  8. MySQL、MongoDB、Redis数据库Docker镜像制作

    MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...

  9. 数据库高可用架构(MySQL、Oracle、MongoDB、Redis)

    一.MySQL MySQL小型高可用架构 方案:MySQL双主.主从 + Keepalived主从自动切换   服务器资源:两台PC Server 优点:架构简单,节省资源 缺点:无法线性扩展,主从失 ...

随机推荐

  1. Android开发 assets目录

    Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.Java里面自动生成该资源文件的ID,所以访问这种资源文件 ...

  2. playbook

    1 --- - hosts: web-server 3 remote_user: root tasks: - name: stop logstash shell: PID=` $PID &&a ...

  3. week07 13.4 NewsPipeline之 三 News Deduper

    还是循环将Q2中的东西拿出来 然后查重(去mongodb里面把一天之内的新闻都拿出来,然后把拿到的新的新闻和mongodb里一天内的新闻组一个 tf-idf的对比)可看13.3 相似度检查 如果超过一 ...

  4. js实现图片上传预览功能,使用base64编码来实现

    实现图片上传的方法有很多,这里我们介绍比较简单的一种,使用base64对图片信息进行编码,然后直接将图片的base64信息存到数据库. 但是对于系统中需要上传的图片较多时并不建议采用这种方式,我们一般 ...

  5. Shiro HashedCredentialsMatcher 认证匹配

    Shiro 提供了用于加密密码和验证密码服务的 CredentialsMatcher 接口,而 HashedCredentialsMatcher 正是 CredentialsMatcher 的一个实现 ...

  6. EOS踩坑记 2

    [EOS踩坑记 2] 1.--contracts-console 在开发模式下,需要将 nodeos 添加此选项. 2.Debug Method The main method used to deb ...

  7. Java学习笔记(二十一):类型转换和instanceof关键字

    基本数据类型转换: 自动类型转换:把大类型的数据赋值给大类型的变量(此时的大小指的是容量的范围) byte b = 12; //byte是一个字节 int i = b; //int是四个字节 强制类型 ...

  8. “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (下)

    在前一部分的最后,我们给出了一个寻路的示例,在大多数情况下,运行还算良好,但是有一个小问题,如下图: 很明显,障碍物已经把路堵死了,但是小球仍然穿过对角线跑了出来! 问题在哪里:我们先回顾一下ASta ...

  9. tomcat/Java指定加载jar包的路径

    背景:部署的web站点,应用默认加载工程的/webapps/工程名/WEB-INF/lib下的jar包   但是我需要提供一个和web工程没关系的的jar包管理目录   解决方法: 执行java方法时 ...

  10. MySQL 详细学习笔记

    Windows服务 -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值 ...