oracle24550,ORA-24550错误的原因是什么?

python3.5.2,scrapy1.2.1,cx_Oracle5.2.1

用scrapy抓取,然后存oracle,程序运行几分钟会崩溃

pipelines.py如下:# -*- coding: utf-8 -*-

import os

import cx_Oracle

from twisted.enterprise import adbapi

from company.items import HaiguanItem

os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

class BasePiPeline(object):

def __init__(self, dbargs, insert_sql):

self.dbargs = dbargs

self.insert_sql = insert_sql

def open_spider(self, spider):

self.dbpool = adbapi.ConnectionPool('cx_Oracle', **self.dbargs)

def close_spider(self, spider):

self.dbpool.close()

def process_item(self, item, spider):

self.dbpool.runInteraction(self._do_insert, item, spider)

def _do_insert(self, txn, item, spider):

try:

txn.execute(self.insert_sql, dict(item))

spider.log("保存数据成功: %s" % item['company_name'])

except cx_Oracle.IntegrityError:

spider.log("该条数据已存在: %s" % item['company_name'])

except Exception as e:

spider.log(str(e))

@staticmethod

def create_insert_sql(table, *columns):

sql = "insert into {} ".format(table) + "(" + ", ".join(columns) + \

") values (:" + ", :".join(columns) + ")"

return sql

class HaiguanPipeline(BasePiPeline):

@classmethod

def from_crawler(cls, crawler):

dbargs = crawler.settings.get('DATABASES').get('oracle')

table = 'company_custom_rating'

columns = list(HaiguanItem.fields.keys())

return cls(dbargs=dbargs,

insert_sql=cls.create_insert_sql(table, *columns))

bVGmt4

问题已经解决,使用adbapi连接数据库时指定threaded=True,好像是关于线程安全的问题,具体原因不太清楚,附上ORA-24550文档解释ORA-24550

be187344ad2841ef7a6e03da9f0ad9e8.png

推荐阅读:ORA-24550错误的原因是什么?python3.5.2,scrapy1.…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值