运用场景
当在本地写完代码以后,需要存到远程Mysql数据库服务器的时候
还有一种简单暴力的结局方案就是把项目拿到远程服务器去运行,这样的话对于远程库就是在本地存储了
SSH跳板
- SSH,英文全程是Secure Shell Protocol(安全的壳程序协议)。SSH是现在公司基本上都在使用的一种文字接口的加密传输技术,采用的是非对称秘钥系统。
- 一个是提供类似telnet远程联机服务器的服务。
实际应用
下边的实例是一个存储远程Mysql数据库的实例,大家可以借鉴
from sshtunnel import SSHTunnelForwarder
import pymysql
class SpiderProjectPipeline(object):
def process_item(self, item, spider):
table_name = item['table']
item.pop('table')
# 将item里边的keys拼接成一个字符串
keys = ','.join(item.keys())
# 将item里边的拼接成%s*长度
values = ','.join(['%s'] * len(item))
# 拼接成一个sql语句
# sql = 'insert into %s (%s) VALUES (%s)' % (table_name, keys, values)4
sql = 'insert into %s(%s)values(%s)' % (table_name, keys, values)
# return item
# 远程机器的ip
ssh_host = ''
# 远程机器连接mysql服务器的端口号
ssh_port = 22 #这个端口号是SSh默认的
# 在远程机器上的用户名
ssh_user = ''
# 在远程机器上的用户名的密码
ssh_password = ''
# mysql服务器的主机名或ip地址
mysql_host = ''
# mysql服务器上的端口
mysql_port = 3306
# mysql数据库上的用户名
mysql_user = ''
# mysql数据库的密码
mysql_password = ''
# mysql服务器上数据库名
mysql_db = ''
try:
with SSHTunnelForwarder(
(ssh_host, ssh_port),
ssh_username=ssh_user,
ssh_password=ssh_password,
remote_bind_address=(mysql_host, mysql_port)) as server:
conn = pymysql.connect(host='127.0.0.1',
port=server.local_bind_port,
user=mysql_user,
passwd=mysql_password,
db=mysql_db)
# 生成指针
cur = conn.cursor()
# 执行语句
cur.execute(sql, tuple(item.values()))
conn.commit()
conn.close()