PyCharm 部署 SSH SFTP MySQL
我最初的困扰
我最初的困扰是我办公室的代码和家里的代码脱节了,我经常在两个地方新创或修改代码。这就导致一个问题,我有些时候写多了改多了,我是真的记不清都发生了什么。后来我就问自己,这种情况能否改善一下呢?其实答案很简单,就是要部署SSH,及其相关联的一些衍生产品。
准备工作
我们需要解决的问题即:同步家里和办公室的代码。That’s it!
我们需要什么呢?
- 一台带有外网的服务器
- 必须要用PyCharm Pro
- 部署SSH SFTP MySQL
为什么是这三项准备工作
- 一台带有外网的服务器的作用就是模拟一个网络环境,让你家的电脑和你办公室的电脑觉得它俩在一个网络环境下在运行。具体部署可以参考FRP项目,这里我不过多的赘述了,咱们今天讲得不需要FRP。外网服务器大家的选择基本上也就那几家左右吧?阿里的/腾讯的/华为的/等等。①看哪个服务器里你近,②然后费率比较美丽的,③最好还可以直接就可以布置宝塔镜像的,满足这三条是最好不过了。我最后选择了腾讯的3年440块带宝塔的云服务器,我目前只是希望续费的时候依然能像买的时候这么便宜XD。
- 我们必须要使用PyCharm Pro版,这个是没有办法绕过的坎儿,具体怎么实现我不想过多的阐述,办法总是有的,请自行去查。作为上班族我有能力支付年费,我差不多能支持正版我都会尽力去做,除了实在是太传统美德贵得离谱那种。
- 最后呢,就是挨个部署这几个服务了:SSH / SFTP / MySQL
开始我们今天的旅程!开始部署并实现这三个功能!!
SSH 的部署
- 首先记得在服务器面板和宝塔面板里把你的22号端口给放行了。
- 然后我们在PyCharm的settings
(ctrl + alt + s)
里面去设置尝试连接服务器。 - 弄好了以后你也可以尝试部署SSH服务器解析器,不过多阐述,相关内容可以在CSDN上查看布置。我个人觉得没啥用,我就没搞。对于我来说无非就是多了个解析器。
SFTP 的部署
部署SSH的一个主要目的其实是为了使用SFTP功能,其实它就是个升级版的FTP功能,我们要实现的是办公室/家里的电脑文件和服务器云端进行同步,这样三个地点的文件就能够合一了,困扰我的问题也就解决了。
- 我们部署好SSH后去菜单栏右数第四项的Tools >> Deployment >> Configuration…。
- 成功设置后我们就可以右键点击想同步的文件夹进行Deployment同步啦,具体的操作可以自己体验,快感无限!
- Deployment设置好后还有一个好处就是你可以直接修改你服务器上的文件,在你的PyCharm右边栏有一个叫做Remote Host的标签,点开就能够实时观看或修改你布置的SFTP服务器上面的文件了,非常方便!
MySQL 的部署
其实吧,我觉得MySQL对于我来说在Python量化这块没有什么太大的帮助,我在硬盘里放着CSV文件也一样可以使用的很好。我不是一个CS专业的人士(鄙人是金融+数学科班),但是秉着对新事物从不说不的出发点,我还是义无反顾的部署了这个功能,虽然我依然很菜。首先大家可以参考这个视频【【宝塔】安装云数据库MySQL教程】 我是跟着这个阿婆主进行设置的。
- 我们先在宝塔的面板上部署MySQL, 我用的是5.6版,镜像直接部署好的,挺方便的吧,所以才让大家找带有宝塔镜像的服务商。
- 部署完毕后我们先把MySQL的密码给修改一下,改为root和登录名一致,方便起见。
- 然后我们要重复开端口这件事儿,服务器面板和宝塔面板里 把MySQL的3306端口给放行。
- 登录到服务器上,输入
mysql -uroot -p
登录成功后会出现 MySQL > 命令行 - 注意!下面每行命令结尾都带有分号
;
一定不要忘记这个分号,要么命令会报错! - 如果你的MySQL是5版的输入第一行命令
GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '替换成你的root密码' WITH GRANT OPTION;
- 如果你的MySQL是8版的输入第一行命令
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '替换成你的root密码';
- 后再输入第二行命令
update user set host = '%' where user = 'root';
允许远程登陆 - 最后输入第三行命令
FLUSH PRIVILEGES;
更新权限,大功告成,离开服务器界面即可。 - 然后我们去PyCharm进行设置,如果你像阿婆主一样用NaviCat的话,设置也大同小异,看他的视频即可。
设置的部分就基本上结束了,你觉得可以起飞了是不?咱们还没有设置Python呢老板!
Python 设置 MySQL
- 首先我们要安装两个库:
pip install sqlalchemy
pip install pymysql
- 我们的导入库时一般这样操作
- 强烈建议大家封装一个函数,这样可以避免反复操作,节省时间,原文的出处在这里,我稍微改动了一下。
def df_2_mysql(df, name, user='root用户名', psw='root密码', ip='服务器ip地址:3306', db='你的数据库名称'):
"""
:param df: The data to pass
:param name: The name of the table in db
:param psw: Your password of your database
:param ip: Your IP
:param db: The name of your database
:param user: root
:return: None
"""
con = create_engine('mysql+pymysql://{}:{}@{}/{}'.format(user, psw, ip, db)) # mysql+pymysql的意思为:指定引擎为pymysql
df.to_sql(name, con, index=False, if_exists='replace', chunksize=None)
- 我上传一段我的代码,大家就明白我的意思了
def get_code_list():
data = pro.daily_basic(trade_date=20221001)
x1 = data.pb < 9 # 市净率小于9
x2 = data.close < 120 # 收盘价小于120元
x3 = data.circ_mv > 400000 # 流动市值大于40亿
x41 = data.pe < 100 # 市盈率低于100
x42 = data.pe_ttm > 0 # 滚动市盈率大于0
x43 = data.ps_ttm > 0 # 滚动市销率大于0
x5 = data.turnover_rate > 1 # 换手率大于1
x6 = data.total_mv < 6000000 # 流动市值小于600亿
x = x1 & x2 & x3 & x41 & x42 & x43 & x5 & x6
stock_list_1 = data[x].ts_code.values.tolist()
df_2_mysql(data[x], 'stock_daily_basic') # 这样就上传成功了,是不是很方便?不用写那么长的代码,因为我们之前已经封装过了
- 这是我在PyCharm里调用查看数据库的截屏
结束语
啥都不是事儿,统统都能解决,现在差的就是真香代码了,囧
欢迎大家指点批评,共同进步!