motor helper
# -*- coding: utf-8 -*-
# @Time : 2019-11-08 14:04
# @Author : cxa
# @File : mongohelper.py
# @Software: PyCharm
import asyncio
from helper.logger_helper import logger as storage
import datetime
from motor.motor_asyncio import AsyncIOMotorClient
from collections import Iterable
try:
import uvloop
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
except ImportError:
pass
db_configs = {
'host': '127.0.0.1',
'port': '27017',
'db_name': 'spider',
'user': ''
}
class MotorOperation:
def __init__(self):
self.__dict__.update(**db_configs)
if self.user:
self.motor_uri = f"mongodb://{self.user}:{self.passwd}@{self.host}:{self.port}/{self.db_name}?authSource={self.db_name}"
else:
self.motor_uri = f"mongodb://{self.host}:{self.port}/{self.db_name}"
self.client = AsyncIOMotorClient(self.motor_uri)
self.mb = self.client[self.db_name]
# async def get_use_list(self):
# fs = await aiofiles.open("namelist.txt", "r", encoding="utf-8")
# data = (i.replace("\n", "") async for i in fs)
# return data
async def save_data_with_status(self, items, col="dianping_seed_data"):
tasks = []
for item in items:
data = dict()
data["update_time"] = datetime.datetime.now()
data["create_time"] = datetime.datetime.now()
data["status"] = 0 # 0初始
data.update(item)
tasks.append(data)
print("tasks", tasks)
await self.mb[col].insert_many(tasks)
async def add_index(self, col="dianping_seed_data"):
# 添加索引
await self.mb[col].create_index('url')
async def save_data(self, items, col="dianping_seed_data", key="url"):
# storage.info(f"此时的items:{items}")
if isinstance(items, Iterable):
for item in items:
try:
item[key] = item[key]
await self.mb[col].update_one({
key: item.get(key)},
{'$set': item},
upsert=True)
except Exception as e:
storage.error(f"数据插入出错:{e.args}此时的item是:{item}")
elif isinstance(items, dict):
try:
items[key] = items[key]
await self.mb[col].update_one({
key: items.get(key)},
{'$set': items},
upsert=True)
except Exception as e:
storage.error(f"数据插入出错:{e.args}此时的item是:{items}")
async def change_status(self, condition, col="dianping_seed_data", status_code=1):
# status_code 0:初始,1:开始下载,2下载完了
try:
item = dict()
item["status"] = status_code
item["update_time"] = datetime.datetime.now()
# storage.info(f"修改状态,此时的数据是:{item}")
await self.mb[col].update_one(condition, {'$set': item})
except Exception as e:
storage.error(f"修改状态出错:{e.args}此时的数据是:{item}")
async def get_detail_data(self, col="dianping_seed_data"):
data = self.mb[col].find({'status': 0})
async for item in data:
print(item)
return data
async def reset_status(self, col="dianping_seed_data"):
await self.mb[col].update_many({'status': 1}, {'$set': {"status": 0}})
async def reset_all_status(self, col="dianping_seed_data"):
await self.mb[col].update_many({}, {'$set': {"status": 0}})
async def find_data(self, col="dianping_seed_data"):
"""
获取状态为0的数据,作为爬取对象。
:return:AsyncGeneratorType
"""
cursor = self.mb[col].find({'status': 0}, {"_id": 0})
async_gen = (item async for item in cursor)
return async_gen
async def delete_old_data(self, col="dianping_seed_data"):
try:
yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
result = await self.mb[col].delete_many({'update_time': {'$lte': yesterday}})
print(f"成功删除{result.deleted_count}条")
except Exception as e:
print("删除错误", e.args)
if __name__ == '__main__':
m = MotorOperation()
loop = asyncio.get_event_loop()
loop.run_until_complete(m.delete_old_data(col="dianping_seed_data"))
motor helper的更多相关文章
- [C#] 简单的 Helper 封装 -- RegularExpressionHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- handlebars自定义helper的写法
handlebars相对来讲算一个轻量级.高性能的模板引擎,因其简单.直观.不污染HTML的特性,我个人特别喜欢.另一方面,handlebars作为一个logicless的模板,不支持特别复杂的表达式 ...
- Encountered an unexpected error when attempting to resolve tag helper directive '@addTagHelper' with value '"*, Microsoft.AspNet.Mvc.TagHelpers"'
project.json 配置: { "version": "1.0.0-*", "compilationOptions": { " ...
- VS2015突然报错————Encountered an unexpected error when attempting to resolve tag helper directive '@addTagHelper' with value 'Microsoft.AspNet.Mvc.Razor.TagHelpers.UrlResolutionTagHelper
Encountered an unexpected error when attempting to resolve tag helper directive '@addTagHelper' with ...
- JavaScript模板引擎artTemplate.js——template.helper()方法
上一篇文章我们已经讲到了helper()方法,但是上面的例子只是一个参数的写法,如果是多个参数,写法就另有区别了. <div id="user_info"></d ...
- [ASP.NET MVC 小牛之路]13 - Helper Method
我们平时编程写一些辅助类的时候习惯用“XxxHelper”来命名.同样,在 MVC 中用于生成 Html 元素的辅助类是 System.Web.Mvc 命名空间下的 HtmlHelper,习惯上我们把 ...
- asp.net MVC helper 和自定义函数@functions小结
asp.net Razor 视图具有.cshtml后缀,可以轻松的实现c#代码和html标签的切换,大大提升了我们的开发效率.但是Razor语法还是有一些棉花糖值得我们了解一下,可以更加强劲的提升我们 ...
- C# random helper class
项目中经常需要模拟些假数据,来做测试.这个随机生成数据的helper类就应用而生: using System; using System.Text; using System.Windows.Me ...
- @helper函数使用方法
这个函数方法,我也是通过别人博客看到的,感觉不错和大家一起学习分享一下. 1.自定义函数方法,只在同一个view视图文件里调用 Controller public ActionResult Index ...
随机推荐
- 14.命令模式(Command Pattern)
耦合与变化: 耦合是软件不能抵御变化灾难的根本性原因.不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系. ...
- Linux记录-linux系统常用监控指标
1.Linux运维基础采集项 做运维,不怕出问题,怕的是出了问题,抓不到现场,两眼摸黑.所以,依靠强大的监控系统,收集尽可能多的指标,意义重大.但哪些指标才是有意义的呢,本着从实践中来的思想,各位工程 ...
- mq【转】
kafka解决了什么问题? mq的几个指标 1.消息堆积能力.两亿条1k大小消息体的消息发上来,积压一周不消费,机器哭不哭. 2.吞吐量.来个峰值,每秒两万,连续两小时,临时扩容扛不扛得住. 3.安全 ...
- source命令导入大数据速度慢优化
XX市邮政微商城的项目数据库,300多M,约220万条数据,source命令导入花了20个小时左右,太不可思议. 速度慢原因:220多万条数据,就 insert into 了220多万次,下图: 这是 ...
- 标签中的onclick调用js方法传递多个参数的解决方案
1.JS方法 <script type="text/javascript"> funcation cc(parameter1,parameter2,parameter3 ...
- bzoj千题计划309:bzoj4332: JSOI2012 分零食(分治+FFT)
https://www.lydsy.com/JudgeOnline/problem.php?id=4332 因为如果一位小朋友得不到糖果,那么在她身后的小朋友们也都得不到糖果. 所以设g[i][j] ...
- java如何调用对方http接口(II)
java如何调用接口 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适,所以,问题来了,java如何调用接口?很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对 ...
- new
Android支持插件库,可以是由C/C++开发的JNI形式,也可以是由java代码开发的jar形式(也可以是android封包完成的apk文件).加载jar插件的方式可以分为 1.静态加载2.动态加 ...
- 万能五笔输入法"@相反
经过查找资料,发现是因为键盘使用的英国导致,改为美国解决,其他输入法没发现这个问题.
- 判断闰年(Java)
package day01; import java.util.Scanner; public class leap_year { public static void main (String[] ...