首页 / PYTHON / python连接数据库异步存储
python连接数据库异步存储
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python连接数据库异步存储,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2906字,纯文字阅读大概需要5分钟。
内容图文
实现异步写入mysql数据库的思路:
1,将数据库的连接数据写入到settings文件中,供后面自定义的pipeline使用
2,自定义pipeline,使用Twisted框架实现异步
3,在settings中注册这个管道
在settings设置连接信息
1 MYSQL_HOST = ‘127.0.0.1‘ 2 MYSQL_DBNAME = ‘testdb‘ 3 MYSQL_USER = ‘root‘ 4 MYSQL_PASSWD = ‘123456‘ 5 MYSQL_CHARSET="UTF8" 6 7 MYSQL_PORT = 3306
在pipeline自定义一个新的类来实现异步存储
from MySQLdb.cursors import DictCursor from twisted.enterprise import adbapi class MySQLAsynPipeline(object): def __init__(self,dbpool):
#定义连接池为对象函数 self.dbpool=dbpool query = self.dbpool.runInteraction(self.create_table) #创建存储表 def create_table(self,cursor): sql = "create table if not exists test (id INT PRIMARY KEY auto_increment NOT NULL , title VARCHAR(50) NOT NULL,category_name VARCHAR (100),date_time VARCHAR (20) NOT NULL ,likes INT DEFAULT 0,content longtext ,comment INT DEFAULT 0,collect INT DEFAULT 0,detail_url VARCHAR (255) UNIQUE,src VARCHAR (255))" cursor.execute(sql) #自动调用的,只调用一次 #从settings.py中根据字段加载对应的文件 @classmethod def from_settings(cls, settings): #POOL池子,con:连接 #参数1:dbapiName 数据库接口名称 #参数2:*connargs *args #参数3:*connkw **kwargs
#将setting中连接数据库所需内容取出
config = dict( host=settings[‘MYSQL_HOST‘], db = settings[‘MYSQL_DBNAME‘], user = settings[‘MYSQL_USER‘], passwd =settings[‘MYSQL_PASSWD‘], charset = settings[‘MYSQL_CHARSET‘], port = settings[‘MYSQL_PORT‘], cursorclass = DictCursor, ) #通过Twisted框架提供的容器连接数据库 dbpool = adbapi.ConnectionPool( "MySQLdb", **config ) #cls把参数给__init__ return cls(dbpool) #roll back:回滚 #commit:提交 #事务:如果所有语句都执行正确,才真正执行,只要有一条数据出错,可以通过回滚撤销所有操作 #开启事务 # 尝试执行多条sql语句 #没问题 commit #有问题 roll back #关闭事务 def process_item(self, item, spider): #runInteraction:运行交互 query =self.dbpool.runInteraction(self.insert_sql,item) #当执行过程中出现错误,执行adderrback query.addErrback(self.insert_error, item, spider) return item def insert_error(self,failed): print ">>>>>>>>>>>",failed def insert_sql(self,cursor, item):
#执行具体的插入语句,不需要commit操作,Twisted会自动进行 sql = "insert into test (title,category_name, date_time,likes,content, comment,collect, detail_url,src) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)" cursor.execute(sql, ( item[‘title‘], item[‘category_name‘], item[‘date_time‘], item[‘likes‘], item[‘content‘], item[‘comment‘], item[‘collect‘], item[‘detail_url‘], item[‘src‘][0])
在settings里注册:
ITEM_PIPELINES = { #Mysql异步写入 "JobboleSpider.pipelines.MySQLAsynPipeline": 2, }
完成异步存储,数据存往数据库的速度与下载的速度差不多快
python连接数据库异步存储
标签:content int div 连接数 t_sql __init__ pid roc 一个
本文系统来源:http://www.cnblogs.com/kidl/p/7392142.html
内容总结
以上是互联网集市为您收集整理的python连接数据库异步存储全部内容,希望文章能够帮你解决python连接数据库异步存储所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。