運用場景
當(dāng)在本地寫完代碼以后,需要存到遠(yuǎn)程Mysql數(shù)據(jù)庫服務(wù)器的時候
還有一種簡單暴力的結(jié)局方案就是把項目拿到遠(yuǎn)程服務(wù)器去運行,這樣的話對于遠(yuǎn)程庫就是在本地存儲了
SSH跳板
- SSH,英文全程是Secure Shell Protocol(安全的殼程序協(xié)議)。SSH是現(xiàn)在公司基本上都在使用的一種文字接口的加密傳輸技術(shù),采用的是非對稱秘鑰系統(tǒng)。
- 一個是提供類似telnet遠(yuǎn)程聯(lián)機服務(wù)器的服務(wù)。
實際應(yīng)用
下邊的實例是一個存儲遠(yuǎn)程Mysql數(shù)據(jù)庫的實例,大家可以借鑒
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
# 遠(yuǎn)程機器的ip
ssh_host = ''
# 遠(yuǎn)程機器連接mysql服務(wù)器的端口號
ssh_port = 22 #這個端口號是SSh默認(rèn)的
# 在遠(yuǎn)程機器上的用戶名
ssh_user = ''
# 在遠(yuǎn)程機器上的用戶名的密碼
ssh_password = ''
# mysql服務(wù)器的主機名或ip地址
mysql_host = ''
# mysql服務(wù)器上的端口
mysql_port = 3306
# mysql數(shù)據(jù)庫上的用戶名
mysql_user = ''
# mysql數(shù)據(jù)庫的密碼
mysql_password = ''
# mysql服務(wù)器上數(shù)據(jù)庫名
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()
# 執(zhí)行語句
cur.execute(sql, tuple(item.values()))
conn.commit()
conn.close()