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 ...
随机推荐
- Java中Sax解析XML
SAX基于事件的解析,解析器在一次读取XML文件中根据读取的数据产生相应的事件,由应用程序实现相应的事件处理逻辑,即它是一种“推”的解析方式:这种解析方法速度快.占用内存少,但是它需要应用程序自己处理 ...
- 利用 JMetal 实现大规模聚类问题的研究(二) JMetal代码总览
之前完成了导入JMetal到自己的工程这一步. 在开始我们研究的问题之前,我们先对JMetal的源代码一个全局的认识. JMetal很好地利用了面向对象的特性,对所有的优化问题做了高度的抽象,建议有空 ...
- Web前端框架与移动应用开发第七章
1.练习1:焦点图切换 html: <!doctype html><html><head> <meta charset="utf-8" / ...
- koa2学习笔记
Koa -- 基于 Node.js 平台的下一代 web 开发框架 首先创建一个项目文件夹进行初始化 npm init -y 该命令执行后会生成一个package.json项目描述文件 安装koa n ...
- 使用yield和send实现简单的协程函数
使用yield和send实现协程 协程的本质是在一个线程里实现多个任务之间的来回切换,我们使用yield和send可以实现简单的协程 def pro(): print(1) n = yield &qu ...
- .Net结合JQuery实现向aspx后台函数进行请求。
$.ajax({ url: "Default.aspx/aaaa", async: false, type: "POST", c ...
- Unable to find CMake in android studio
- select实现简单TCP通信(ubuntu 18.04)
一.服务器程序(server.c) #include <stdio.h> #include <unistd.h> #include <stdlib.h> #incl ...
- mysql单表删除记录DELETE
DELETE FROM tbl_name [WHERE where_condition] mysql> SELECT * FROM users;+----+----------+------- ...
- -如何存储并定时更新access_token
来源:https://blog.csdn.net/sct_t/article/details/53002611 我们知道请求access_Token会返回这样一个json,包括access_token ...