Day 21
复习
[root@python ~]# vim test03.py
a=3
b=4
print(a+b)
print(a**2+b**2)
[root@python ~]# python3 test03.py
7
25
# 逐行调试
[root@python ~]# python3 -m pdb test03.py
> /root/test03.py(1)<module>()
-> a=3
(Pdb) n
> /root/test03.py(2)<module>()
-> b=4
(Pdb) n
> /root/test03.py(3)<module>()
-> print(a+b)
(Pdb) n
7
> /root/test03.py(4)<module>()
-> print(a**2+b**2)
(Pdb) n
25
--Return--
> /root/test03.py(4)<module>()->None
-> print(a**2+b**2)
(Pdb) n
--Return--
> <string>(1)<module>()->None
(Pdb) n
[root@python ~]# python3
>>> import random
>>> random
<module 'random' from '/usr/lib64/python3.6/random.py'>
>>>
[root@python ~]# cat /usr/lib64/python3.6/random.py
搭建frp服务上线mysql数据库
# mysql-master作为服务器端对外发布
[root@master-mysql ~]# cp -r frp_0.33.0_linux_amd64/ frp/
[root@master-mysql ~]#cd frp/
[root@master-mysql frp]# ls
frpc frpc.ini frps_full.ini LICENSE
frpc_full.ini frps frps.ini systemd
[root@master-mysql frp]#vim frps.ini
bind_port = 7000
dashboard_user=aaa
dashboard_pwd=aaa
dashboard_port=7500
[root@master-mysql frp]#firewall-cmd --zone=public --add-port=7500/tcp --permanent
[root@master-mysql frp]#firewall-cmd --zone=public --add-port=6000-6100/tcp --permanent
[root@master-mysql frp]#firewall-cmd --reload
[root@master-mysql frp]#./frps -c frps.ini
2024/07/19 11:18:14 [I] [service.go:178] frps tcp listen on 0.0.0.0:7000
2024/07/19 11:18:14 [I] [root.go:209] start frps success
firewall-cmd --zone=public --add-port=7000/tcp --permanent
# 客户端的配置
[root@cz ~]# ls
anaconda-ks.cfg frp_0.33.0_linux_amd64.tar
frp_0.33.0_linux_amd64
[root@cz ~]# cd frp_0.33.0_linux_amd64
[root@cz frp_0.33.0_linux_amd64]# ls
frpc frpc.ini frps_full.ini LICENSE
frpc_full.ini frps frps.ini systemd
[root@cz frp_0.33.0_linux_amd64]# vim frpc.ini
[common]
server_addr = 192.168.2.45
server_port = 7000
[caizijaun]
type = tcp
local_ip = 127.0.0.1
local_port = 3306
remote_port = 6029
[root@cz frp_0.33.0_linux_amd64]# ./frpc -c frpc.ini
2024/07/19 13:59:31 [I] [service.go:282] [d82f1ce364b4ddbd] login to server success, get run id [d82f1ce364b4ddbd], server udp port [0]
2024/07/19 13:59:31 [I] [proxy_manager.go:144] [d82f1ce364b4ddbd] proxy added: [caizijuan]
2024/07/19 13:59:31 [W] [control.go:177] [d82f1ce364b4ddbd] [caizijuan] start error: port already used
[root@cz ~]# firewall-cmd --zone=public --add-port=21/tcp --permanent
[root@cz ~]# systemctl start firewalld
[root@cz ~]# firewall-cmd --zone=public --add-port=21/tcp --permanent
[root@cz ~]# firewall-cmd --reload
Python管理myql
====== Pytho n 更换源的方法 ======
[root@python ~]# pip3 install pandas
# 永久换源
方法一:一行命令换源
只需在命令行中输入下面这一行命令,即可永久设置pip下载源为国内源,提⾼下载和安装速度:
[root@python ~]#pip3 config set global.index-url Simple Index
[root@python ~]#yum -y install sqlalchemy
[root@python ~]#pip3 install pandas
注意 ****:****如果执行命令时报错 ERROR: unknown command "config" 可能是Pip版本过低,要么升级pip版本,要么使用方法二。
方法二:配置换源脚本
不管你用的是pip3还是pip,方法都是一样的(也即都是创建pip文件夹):
1)先创建文件夹,然后创建并打开文件(如果你已经有这个文件夹或者文件,那么执行下面的命令可能会报错,这无所谓,目的是有这个文件夹和文件就行)
[root@python ~]#mkdir ~/.pip
[root@python ~]#vim ~/.pip/pip.conf
2)在pip.conf文件中输入以下内容,然后保存退出即可。
[global]
timeout=100
index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
extra-index-url= http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=
=======列举 国内源列表 =====
阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣 http://pypi.douban.com/simple/
Python官方 https://pypi.python.org/simple/
v2ex http://pypi.v2ex.com/simple/
中国科学院 http://pypi.mirrors.opencas.cn/simple/
清华大学 Simple Index
# 临时换源
每次都给pip进行临时换源:pip3 install -i http://pypi.douban.com/simple/ 包名
# 安装pandas数据分析工具(pandas是知名的数据分析工具,pandas有完整的读取数据的工具,以及DateFrame数据框架,⽤于保存从数据库中读取的数据)
[root@python ~]#yum -y install pymysql
# 安装pymysql连接器(oracle为开发者提供的python管理mysql的⼯具,通过这个⼯具,就恶意在不替原有代码的情况下,应对数据库软件的升级)
[root@python ~]#yum -y install pymysql
Successfully installed pymysql-1.0.2
[root@python ~]#python3
>>> import pymysql
>>> import pandas
>>> pymysql
<module 'pymysql' from '/usr/local/lib/python3.6/site-packages/pymysql/init.py'>
>>> pandas
<module 'pandas' from '/usr/local/lib64/python3.6/site-packages/pandas/init.py'>
>>> import pymysql as py
>>> import pymysql as pm
>>> import pandas as pd
>>> pm
<module 'pymysql' from '/usr/local/lib/python3.6/site-packages/pymysql/init.py'>
>>> pd
<module 'pandas' from '/usr/local/lib64/python3.6/site-packages/pandas/init.py'>
>>> conn=pm.connect(
... host='192.168.2.45',
... user='huajuan',
... password='Huajuan_123',
... database='test',
... port=6029);
>>> conn=pm.connect(
>>> conn
<pymysql.connections.Connection object at 0x7faaaa7463c8>
>>> cursor=conn.cursor()
# 查看游标
>>> cursor
<pymysql.cursors.Cursor object at 0x7faaaa79bbe0>
>>> sql="select * from student"
>>> sql
'select * from student'
>>> cursor.execute(sql)
5
>>> cursor.fetchall()
((1, '花卷', '女'), (2, '张三', '男'), (3, '莎莎', '女'))
>>> cursor.description
(('id', 3, None, 11, 11, 0, False), ('name', 253, None, 180, 180, 0, False), ('gender', 253, None, 16, 16, 0, False))
>>> head=[]
>>> desc=cursor.description
>>> for var in desc:
... print(var[0])
...
id
name
gender
>>> for var in desc:
... head.append(var[0]
...
...
... )
...
>>> head
['id', 'name', 'gender']
>>> pd.DataFrame(data=cursor.fetchall(),columns=head)
Empty DataFrame
Columns: [id, name, gender]
Index: []
>>> pd.DataFrame(cursor.fetchall(),columns=head)
Empty DataFrame
Columns: [id, name, gender]
Index: []
>>> cursor.fetchall()
()
>>> cursor.execute(sql)
5
>>> res=cursor.fetchall()
>>> res
((1, '花卷', '女'), (2, '张三', '男'), (3, '莎莎', '女'))
>>> head
['id', 'name', 'gender']
>>> pd.DataFrame(data=res,columns=head)
id name gender
0 1 花卷 女
1 2 张三 男
2 3 莎莎 女
将所有操作编写成一个py文件
说明:和shell脚本⼀样python⽂件也可以称为py脚本,也是将pyhton指令做⼀个集。为了脚本更加的智能化和⾃动化,添加选择语句(智能)循环语
句(⾃动化),同时为了开发效率,可读性,做了⽅法,类,模块,
[root@python ~]#vim python_mysql.py
import pandas as pd
import pymysql as pm
class Python_Mysql_01(object):
import pymysql as pm
class Python_Mysql_01(object):
def int(self):
print('test')
def getConn(self):
print('*************************')
conn=pm.connect(
host=input('sign host_ip|name:'),
user=input('sign database username:'),
password=input('sign database password:'),
database=input('sign database name:'),
port=int(input('sign port no:')
)
#print(conn)
return conn
def getRes(self, curror, sql):
cursor.execute(sql)
# 获得查询的数据
data=cursor.fetchall()
# 三目运算符,获得表头
head=[item[0] for item in cursor.description]
resturn cursor.fetchall()
# 组成pandas数据框 DataFrame
return pandas.DataFrame(data=data,columns=head)
if name=="main":
# 初始化 Python_Mysql_01 类,创建实例pmp,之后所有的方法都可以在实例中调用
pmp=Python_Mysql_01()
# 获得conn
conn=pmp.getConn()
# 获得游标
cursor=conn.cursor()
print(cursor)
pmp.getConn()
Tablename=input('sign tablename')
df=pmp.getRes(cursor,'select * from'+tablename)
print(df)
[root@python ~]#python3 python_mysql.py
((1, '花卷', '女'), (2, '张三', '男'), (3, '莎莎', '女'))
pip3 install pyinstaller
[root@fw ~]# ./python_mysql
*************************
sign host_ip|name:192.168.2.45
sign database username:huajuan
sign database password:Huajuan_123
sign database name:test
sign port no:6029
id name gender
0 1 花卷 女
1 2 张三 男
2 3 莎莎 女
[root@python ~]#ls
[root@python dist]#cd dist/
python_mysql
Python生成可执行文件
说明:因为py文件要被执行需要在linux中安装python环境,但是二进制可执行文件,不要环境,在任何linux主机上都可以执行。# 安装pyinstaller
[root@python ~]#pip3 insatll pyinstaller
[root@python ~]#which pyinstaller
# 使⽤pyinstaller生成可执行文件
[root@python ~]#pyinstaller --onefile python_mysql.py
注意: py文件中必须是有 if name=="main":
python_mysq
python模块发布web服务
[root@python ~]#python3 -m http.server 9000
能够将当前目录中所有的文件作为web服务器发布。