文档章节

跨网络,跨数据库查询插入数据

ricardohn
 ricardohn
发布于 2017/02/17 10:55
字数 307
阅读 8
收藏 0

 背景:部署的外网的生产环境由于数据库配置导致部分数据没有插入成功,从内网测试环境查询相关数据插入到生产环境数据库。生产环境数据库只能通过SSH连接进行访问,所以先把需要查询更新的数据导出到文本里面,从内网数据库查询到后再进行插入操作。

#coding=utf-8

import MySQLdb
from sshtunnel import SSHTunnelForwarder 

sql1='select videoType from t_video_type_relevance where videoId IN\
    (select videoId from t_video where videoName=%s)'
SQL2='INSERT INTO t_video_type_relevance_copy(videoType,videoId) values(%s,%d)'

db1 = MySQLdb.connect("192.168.1.246","root","123456","dbname" )
cursor1 = db1.cursor()
cursor1.execute('SET NAMES UTF8') #设置连接编码格式,应对中文问题

data1=[]
data2=[]
with open("c://Users//huangning//Desktop//MISSING.txt",'r') as f:
    lines = f.readlines()
    for line in lines:
        videoId = int(line.split('AB')[0].strip('"'))
        videoName = line.split('AB')[1]
        #print videoId,videoName
        
        
        try:
            cursor1.execute(sql1%videoName)
            result= cursor1.fetchone()[0]
            data = (result,videoId)
            data1.append(data)
        except Exception:
            data2.append(videoId)
            print 'insert not success : %d'%videoId
        
#print data1
#print data2

with SSHTunnelForwarder(('x.x.x.x', 22),    #B机器的配置  
         ssh_password="pwd",  
         ssh_username="username",  
         remote_bind_address=('10.254.0.12', 3306)) as server:  #A机器的配置  
  
        conn = MySQLdb.connect(host='127.0.0.1',              #此处必须是是127.0.0.1  
                           port=server.local_bind_port,  
                           user='username',  
                           passwd='pwd',  
                           db='dbname')
        cursor2 = conn.cursor()
        cursor2.execute('SET NAMES UTF8')
        for item in data1:
            try:
                cursor2.execute(SQL2%item)
                conn.commit()
            except:
                
                conn.rollback()

 

© 著作权归作者所有

共有 人打赏支持
ricardohn
粉丝 1
博文 76
码字总数 30236
作品 0
成都
Sql查询一张表的结果插入另一张表

1、待插入目标表不存在: select * from 目标表 from 表 where 条件 2、待插入目标表已经存在: insert into 目标表 select * from 表 where 条件 3、如果是跨数据库操作的话,将A数据库的a...

Elven_Xu
2016/04/25
105
0
Hypertable 0.9.7.16 发布,分布式数据库

Hypertable 0.9.7.16 发布, 此版本升级到了 C++11 编译器;在 SELECT 指令添加了 NO_CACHE 选项;修复了插入性能方面的问题;修复了 deb 和 RPM 包的安装问题;其他 bug 修复。 Hypertable...

oschina
2014/02/19
855
2
关于跨DB增量(增、改)同步两张表的数据小技巧

有些场景下,需要隔离不同的DB,彼此DB之间不能互相访问,但实际的业务场景又需要从A DB访问B DB的情形,这时怎么办?我认为有如下常规的三种方案: 1.双方提供RESET API,需要访问不同DB数据...

梦在旅途
08/14
0
0
Hypertable 0.9.6.5 发布,分布式数据库

Hypertable 0.9.6.5 是一个 bugfix 版本。 Hypertable是一个开源、高性能、可伸缩的数据库,它采用与Google的Bigtable相似的模型。在过去数年中,Google为在 PC集群 上运行的可伸缩计算基础设...

oschina
2012/10/24
936
0
分布式数据库--Hypertable

Hypertable是一个开源、高性能、可伸缩的数据库,它采用与Google的Bigtable相似的模型。在过去数年中,Google为在PC集群 上运行的可伸缩计算基础设施设计建造了三个关键部分。第一个关键的基...

匿名
2009/01/21
22.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

使用esp8266制作wifi干扰器

概述 这个东西,说真的对现在的无线网络环境影响其实不是很大了,首先它只能玩2.4ghz的无线,其次这个模块不是特别的可靠,运行的时候温度会很高,买来玩玩还是可以的 什么是esp8266 ESP8266...

bboysoulcn
11分钟前
0
0
以太坊总结

一、概念说明 1.以太坊(Ethereum blockchain)由V神(Vitalik Buterin)发明,是一个交易记录的永久数据库,它以一个“无信任”的交易系统来运行,不需要任何第三方信任机构即可进行点对点的...

盼望明天
36分钟前
1
0
Java并发工具类——AtomicInteger

基本类型int的递增等操作并不是线程安全的,加上synchronized又会影响性能,因此在并发情况下我们应该使用AtomicInteger,下面通过一个例子验证一哈。 public class TestAtomicInteger {...

东都大狼狗
38分钟前
1
0
基于CentOS7.2系统对RabbitMQ单机版安装过程

准备虚拟机系统 我的系统如下 系统版本7.2 安装perl yum install perl 安装wget工具 yum install -y wget 安装相关依赖工具 yum install ncurses ncurses-base ncurses-devel ncurses-libs ...

凌晨一点
42分钟前
1
0
Maven常用命令

Maven常用命令 说到命令,则不得不提一下环境变量,在之前的博文中简单提了一下环境变量的配置,这里具体说一下。说完环境变量的配置,然后就是Maven的常用命令,这里说的是常用的几个命令,...

星汉
58分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部